如何在 Firebase 3.0 中注销用户?

How do I sign out users in Firebase 3.0?

根据 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(); 不会引发错误。我也在控制台中迁移了应用程序。

在 JavaScript 中,您可以通过以下方式注销用户:

firebase.auth().signOut().then(function() {
  console.log('Signed Out');
}, function(error) {
  console.error('Sign Out Error', error);
});

不知道我理解的对不对,如果你想退出所有登录的用户: 这是不可能的,因为代码是 运行 在客户端 并且身份验证状态指的是客户端 运行 它。

您无法访问连接到 firebase 身份验证服务的每个客户端,因为这意味着 运行 服务器端的代码。

然而,有一个选项可以指定会话的持续时间,这是 auth 部分中的 remember 参数。

firebase.auth().signOut()

简直对我有用!

有几种注销用户的方法:

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 默认身份验证依赖项,例如: 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 默认身份验证依赖项,例如: 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();
}

扩展@Frank van Puffelen 的答案,这段代码就像一个魅力,但在 then() 函数内承诺拒绝处理作为第二个参数是一种不好的做法。

而是添加一个 .catch(e) 块。

因为,如果错误发生在 signout() 函数,那么将被处理,但如果错误发生在 .then() 块,则它不会被处理。

更好的代码是,

firebase.auth().signOut()
.then(() => {
  console.log('Signed Out');
})
.catch(e=>{
 console.error('Sign Out Error', e);
});

您可以尝试使用最新的 firebase。它适用于我的 angular firebase 身份验证。

async logout() {
 await signOut(this.auth);
 localStorage.removeItem("user");
}