我的应用程序中有简单的用户名和密码、Facebook 和 Google 身份验证。我想对密码经过身份验证的用户执行不同的操作。
Code
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();
}
}
Problem: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
is not facebook.com
or google.com
这意味着用户已使用用户名和密码进行身份验证,但此语句是不正确!在这两种情况下,都会使用用户名和密码对用户进行身份验证。的情况下facebook.com
用户将使用来自 facebook 的凭据进行身份验证,以防万一google.com
用户将使用来自的凭据进行身份验证GoogleSignInAccount
object.
那么,如果您使用 if 语句,会发生什么,首先它会评估用户是否通过用户名和密码进行身份验证,这显然是因为user != null
第二个将尝试找到providerId
,这可以是facebook.com
or google.com
。这就是为什么显示 Toast 消息的顺序是Simmple method is used
第二个fb or goole method is used
.
Edit:我能想到的最简单的方法是使用三个不同的身份验证部分并跟踪用户访问了哪一个。如果用户按下谷歌登录按钮,那么他将使用谷歌登录,对于其他类型,依此类推,
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)