检查用户是否已通过密码验证或已通过某些提供程序

时间:2018-08-16 22:59:47

标签: java android firebase firebase-authentication

我的应用程序中具有简单的用户名和密码,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都在循环中执行。有解决方案吗?

2 个答案:

答案 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.comgoogle.com,则表示该用户已通过用户名和密码进行了身份验证,但此语句是 incincrect !在这两种情况下,都使用用户名和密码对用户进行身份验证。如果使用facebook.com,将使用来自facebook的凭据对用户进行身份验证;如果使用google.com,将使用来自GoogleSignInAccount对象的凭据来对用户进行身份验证。

因此,如果您使用该if语句,会发生什么情况,首先它会评估用户是否已使用用户名和密码进行了身份验证,这显然是因为user != null,然后它会尝试找到providerId,这可以为facebook.comgoogle.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();

            }
        }