如何在 Firebase 3.0 中注销用户?
Posted
技术标签:
【中文标题】如何在 Firebase 3.0 中注销用户?【英文标题】:How do I sign out users in Firebase 3.0? 【发布时间】:2016-09-19 11:46:59 【问题描述】:根据documentation,我强制用户使用signOut()
的方法退出。
这是我尝试过的:
var rootRef = firebase.database().ref();
var loggedInUser = firebase.auth();
1. firebase.signOut();
2. loggedInUser.signOut();
3. rootRef.signOut();
4. signOut();
5. firebase.auth.signOut();
上述五个中的每一个我都会得到... is not a function
。我知道我对新 Firebase 的引用没有问题,因为 firebase.database().ref();
和 firebase.auth();
不会引发错误。我还在控制台中迁移了应用程序。
【问题讨论】:
【参考方案1】:您可以在最新的 Firebase 中尝试这个。它适用于我的 Angular Firebase 身份验证。
async logout()
await signOut(this.auth);
localStorage.removeItem("user");
【讨论】:
【参考方案2】:扩展@Frank van Puffelen 的答案,这段代码就像一个魅力,但在then()
函数中作为第二个参数处理承诺拒绝是一种不好的做法。
而是添加一个.catch(e)
块。
因为,如果signout()
函数发生错误,那么将被处理,但如果错误发生在.then()
块,则不会被处理。
更好的代码是,
firebase.auth().signOut()
.then(() =>
console.log('Signed Out');
)
.catch(e=>
console.error('Sign Out Error', e);
);
【讨论】:
【参考方案3】:有几种方法可以退出用户:
1. FirebaseUI: Refarence
添加依赖:
dependencies
implementation 'com.firebaseui:firebase-ui-auth:4.0.0'
然后:
public void onClick(View v)
if (v.getId() == R.id.sign_out)
AuthUI.getInstance()
.signOut(this)
.addOnCompleteListener(new OnCompleteListener<Void>()
public void onComplete(@NonNull Task<Void> task)
// user is now signed out
startActivity(new Intent(MyActivity.this, SignInActivity.class));
finish();
);
2。科特林: Referance
使用 android 默认的 Authentication 依赖,例如: com.google.firebase:firebase-auth:16.0.1
firebase.auth().signOut().then(function()
// Sign-out successful.
).catch(function(error)
// An error happened.
);
3.默认使用 java:
使用 Android 默认的 Authentication 依赖,例如: com.google.firebase:firebase-auth:16.0.1
FirebaseUser user = mAuth.getCurrentUser();
if (user != null)
mAuth.signOut();
Toast.makeText(this, user.getEmail()+ " Sign out!", Toast.LENGTH_SHORT).show();
else
Toast.makeText(this, "You aren't login Yet!", Toast.LENGTH_SHORT).show();
【讨论】:
Kotlin 代码看起来与 javascript 非常相似。【参考方案4】:firebase.auth().signOut()
它对我有用!
【讨论】:
【参考方案5】:我不知道我是否理解正确,但如果您想退出每个登录的用户: 这是不可能的,因为代码在客户端上运行,而身份验证状态是指运行它的客户端。
您无法访问连接到 firebase 身份验证服务的每个客户端,因为这意味着在服务器端运行代码。
但是,有一个选项可以指定会话的持续时间,即 auth 部分中的 remember 参数。
【讨论】:
不,只是当前在客户端登录的用户 好吧,我不太明白你问题的第二部分。【参考方案6】:在 JavaScript 中,您可以使用以下命令退出用户:
firebase.auth().signOut().then(function()
console.log('Signed Out');
, function(error)
console.error('Sign Out Error', error);
);
【讨论】:
我们如何在 Java 中做到这一点? 我正在这样做并在控制台中记录“已注销”,但我的 firebase.auth().onAuthStateChanged() 立即返回,用户仍处于登录状态:(使用 JS SDK 3.5.2 @frank-van-puffelen 什么情况下 signOut() 可能会失败? 我在调用signOut() 后正在刷新页面。添加 signOut().then(() => refresh 解决了问题以上是关于如何在 Firebase 3.0 中注销用户?的主要内容,如果未能解决你的问题,请参考以下文章
当我在firebase上删除他的帐户时如何从应用程序中注销用户?
用户注销 React Native 应用程序时如何删除 Firebase 云消息传递令牌?
如何在不使用 Facebook 登录/注销按钮的情况下以编程方式从 Facebook SDK 3.0 注销?