我的应用程序中有简单的用户名和密码、Facebook 和 Google 身份验证。我想对密码 Authenticated 用户执行不同的操作。
代码
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
for (UserInfo profile : user.getProviderData()) {
// Id of the provider (ex: google.com)
String providerId = profile.getProviderId();
if(providerId.equals("facebook.com") | providerId.equals("google.com"))
{
Toast.makeText(this,"fb or goole method is used",Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(this,"Simmple method is used",Toast.LENGTH_SHORT).show();
}
}
问题: if 和 else 都在循环中执行。有什么解决办法吗?
最佳答案
如果您使用以下 if 语句:
if(providerId.equals("facebook.com") | providerId.equals("google.com")) {
Toast.makeText(this,"fb or goole method is used",Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this,"Simmple method is used",Toast.LENGTH_SHORT).show();
}
这意味着如果 providerId
不是 facebook.com
或 google.com
这意味着用户已通过用户名和密码进行身份验证,但此声明不正确!在这两种情况下,用户都使用用户名和密码进行身份验证。在 facebook.com
的情况下,用户将使用来自 facebook 的凭据进行身份验证,而在 google.com
的情况下,用户将使用来自 facebook 的凭据进行身份验证来自 GoogleSignInAccount
对象。
那么如果您使用该 if 语句会发生什么情况,首先它会评估用户是否通过用户名和密码进行身份验证,这显然是因为 user != null
然后将尝试找到 providerId
,可以是facebook.com
或google.com
。这就是为什么显示 Toast 消息的顺序是 使用 Simmple 方法
和第二个 使用 fb 或 goole 方法
。
编辑: 我能想到的最简单的方法是拥有三个不同的身份验证部分并跟踪用户访问了哪一个。如果用户按下 google 登录按钮,那么他将使用 google 登录,对于其他类型则依此类推,
关于java - 检查用户是否通过密码验证或使用某些提供商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51886378/