我正在使用谷歌的firebase,我在用户身份验证方面遇到了一些麻烦 . 使用Facebook登录后,我在AuthStateListener中获取FirebaseUser,但是如何通过facebook或不同方式检测此用户是否已记录?
更新正如@Frank van Puffelen所说,FirebaseAuth.getInstance() . getCurrentUser() . getProviderId()应该返回“facebook”,但在我的情况下它会返回“firebase” . 现在我无法弄清楚这种行为的原因是什么 . 当我收到FacebookToken时,我会这样做:
AuthCredential credential = FacebookAuthProvider.getCredential(facebookToken.getToken());
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
// If sign in fails, display a message to the user. If sign in succeeds
// the auth state listener will be notified and logic to handle the
// signed in user can be handled in the listener.
if (!task.isSuccessful()) {
}
}
});
然后在调用onComplete()方法之前,我的AuthStateListener获取用户哪个提供者ID不应该是"facebook" . 难道我做错了什么?我跟着官方谷歌documentation
4 回答
在3.x及更高版本中,单个用户可以使用多个提供程序登录 . 因此,不再存在单个提供者ID的概念 . 事实上,当你打电话:
它将始终返回
firebase
.要检测用户是否使用Facebook登录,您必须检查提供者数据:
在我的应用中,我使用的是匿名Firebase帐户 . 当我将Firebase auth与Facebook帐户或Google帐户连接时,我会检查如下:
响应的Intent中存在信息 .
请参阅以下代码段:
responseCode是"phone","google.com","facebook.com"或"twitter.com" .
最近的解决方案是:
如上所述here
并在页面中显示