如何在 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 auth用户

当我在firebase上删除他的帐户时如何从应用程序中注销用户?

用户注销 React Native 应用程序时如何删除 Firebase 云消息传递令牌?

如何在不使用 Facebook 登录/注销按钮的情况下以编程方式从 Facebook SDK 3.0 注销?

Swift 3.0 如何在 Firebase 中的父级上添加子级

如果没有创建 Geofire,我如何检查 Geofire 以注销用户?