java检查用户是否经过密码验证或与某个提供者进行了验证
我的应用程序中有简单的用户和密码、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都在循环中执行。有解决办法吗
# 1 楼答案
如果使用以下If语句:
这意味着如果}或
providerId
不是{google.com
,这意味着用户通过用户和密码进行身份验证,但此语句是正确的!在这两种情况下,都使用用户和密码对用户进行身份验证。在facebook.com
情况下,将使用来自facebook的凭据对用户进行身份验证;在google.com
情况下,将使用来自GoogleSignInAccount
对象的凭据对用户进行身份验证因此,如果您使用if语句,首先它评估用户是否使用user和password进行了身份验证,这显然是因为
user != null
,第二个将尝试查找providerId
,它可以是facebook.com
或google.com
。这就是为什么Toast消息的显示顺序是Simmple method is used
和第二fb or goole method is used
编辑:我能想到的最简单的方法是拥有三个不同的身份验证部分,并跟踪用户访问了哪个部分。如果用户按下google登录按钮,那么他将使用google登录,其他类型的用户也将如此
# 2 楼答案
我没有为密码身份验证指定提供程序Id。我甚至不知道密码验证的提供者。文件中也没有。(据我所知)
所以我所做的是:
将这些行放入循环以获取密码身份验证的提供者id。这是
password
并使用elseif对其进行过滤