我正在使用Google的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”。难道我做错了什么?我遵循了Google的官方文档
在3.x版和更高版本中,可以使用多个提供程序登录单个用户。因此,不再存在单个提供者ID的概念。实际上,当您致电:
FirebaseAuth.getInstance().getCurrentUser().getProviderId()
它将始终返回firebase
。
要检测用户是否已使用Facebook登录,您必须检查提供商数据:
for (UserInfo user: FirebaseAuth.getInstance().getCurrentUser().getProviderData()) {
if (user.getProviderId().equals("facebook.com")) {
System.out.println("User is signed in with Facebook");
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句