我如何检查我的用户是否已插入我的应用程序使用哪个身份验证提供程序?我想通过Facebook身份验证提供商或使用电子邮件提供商或使用Google身份验证提供程序检测我的用户是否已插入我的应用程序。我在Firebase Docs中搜索了这个,但我找不到合适的答案,
答案 0 :(得分:2)
您可以随时查看Malik指出的提供商列表。但是,由于您可以将多个提供程序链接到同一个用户,要获取具有多个提供程序的当前用户的登录方法,您必须检查ID令牌。您需要在令牌中查看firebase.sign_in_provider
声明。这将为您提供用于获取ID令牌的登录方法。要在客户端上获取它,您需要getIdToken,然后使用一些JWT解析器解析返回的JWT。
答案 1 :(得分:2)
FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
if (firebaseUser.getProviderData().size() > 0) {
//Prints Out google.com for Google Sign In, prints facebook.com for Facebook
e("TOM", "Provider: " + firebaseUser.getProviderData().get(firebaseUser.getProviderData().size() - 1).getProviderId());
}
答案 2 :(得分:0)
替代
getProviders()方法列表按最新提供者排序 用于登录。因此getProviderData()中的第一个元素是 用户用来登录的方法。
这也是为什么 FirebaseAuth.getInstance()。getCurrentUser()。getProviderId()返回 firebase是因为始终创建后备Firebase帐户 不论用户如何登录。这有助于进行链接和 取消帐户的链接,用户可能需要附加多个帐户 凭据(但是您对FirebaseUser的看法没有改变)。
请提及此post。
答案 3 :(得分:0)
您可以使用用户对象(getIdTokenResult()
)的方法firebase.User
来获取IdTokenResult
对象,该对象的signInProvider
属性可用于检测已登录的登录方法用户。
答案 4 :(得分:0)
我一直对这个问题感到困惑,也很长时间没有找到合适的解决方案。结果证明解决方案很短:
String strProvider = FirebaseAuth.getInstance().
getAccessToken(false).getResult().getSignInProvider();
所以,if (strProvider.equals("password"))
那么身份验证是通过电子邮件 + 密码,
if (strProvider.equals("google.com"))
然后通过 Google 进行身份验证,
if (strProvider.equals("facebook.com"))
然后通过 Facebook 进行身份验证。
但是,使用这种单行代码,您可以获得一个异常,可以通过像这样添加 OnSuccessListener
来防止该异常:
mAuth = FirebaseAuth.getInstance();
mAuth.getAccessToken(false).addOnSuccessListener(new OnSuccessListener<GetTokenResult>() {
@Override
public void onSuccess(GetTokenResult getTokenResult) {
strProvider = getTokenResult.getSignInProvider();
}
});