我的应用程序中具有简单的用户名和密码,Facebook和Google身份验证。我想对经过身份验证的密码用户执行不同的操作。
代码
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都在循环中执行。有解决方案吗?
答案 0 :(得分:1)
如果您使用以下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
,则表示该用户已通过用户名和密码进行了身份验证,但此语句是 incincrect !在这两种情况下,都使用用户名和密码对用户进行身份验证。如果使用facebook.com
,将使用来自facebook的凭据对用户进行身份验证;如果使用google.com
,将使用来自GoogleSignInAccount
对象的凭据来对用户进行身份验证。>
因此,如果您使用该if语句,会发生什么情况,首先它会评估用户是否已使用用户名和密码进行了身份验证,这显然是因为user != null
,然后它会尝试找到providerId
,这可以为facebook.com
或google.com
。这就是显示Toast消息的顺序为Simmple method is used
和第二fb or goole method is used
的原因。
编辑:我想到的最简单的方法是拥有三个不同的身份验证部分,并跟踪用户访问了哪一个。如果用户按下google登录按钮,那么他将使用google等其他类型的登录,
答案 1 :(得分:0)
我没有为密码验证指定提供者ID。我什至不知道密码验证的提供者。它也没有出现在文档中。 (据我所知)
所以我所做的是:
String providerId = profile.getProviderId();
Toast.makeText(this,providerId,Toast.LENGTH_SHORT).show();
将这些行放入循环中以获取密码身份验证的提供者ID。这是password
并使用elseif对其进行过滤。
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
for (UserInfo profile : user.getProviderData()) {
// Id of the provider (ex: google.com)
String providerId = profile.getProviderId();
Toast.makeText(this,providerId,Toast.LENGTH_SHORT).show();
if(providerId.equals("facebook.com") | providerId.equals("google.com"))
{
Toast.makeText(this,"fb or goole method is used",Toast.LENGTH_SHORT).show();
}
else if(providerId.equals("password"))
{
Toast.makeText(this,"Simmple method is used",Toast.LENGTH_SHORT).show();
}
}