有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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都在循环中执行。有解决办法吗


共 (2) 个答案

  1. # 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不是{}或google.com,这意味着用户通过用户和密码进行身份验证,但此语句是正确的!在这两种情况下,都使用用户和密码对用户进行身份验证。在facebook.com情况下,将使用来自facebook的凭据对用户进行身份验证;在google.com情况下,将使用来自GoogleSignInAccount对象的凭据对用户进行身份验证

    因此,如果您使用if语句,首先它评估用户是否使用user和password进行了身份验证,这显然是因为user != null,第二个将尝试查找providerId,它可以是facebook.comgoogle.com。这就是为什么Toast消息的显示顺序是Simmple method is used和第二fb or goole method is used

    编辑:我能想到的最简单的方法是拥有三个不同的身份验证部分,并跟踪用户访问了哪个部分。如果用户按下google登录按钮,那么他将使用google登录,其他类型的用户也将如此

  2. # 2 楼答案

    我没有为密码身份验证指定提供程序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();
    
                }
            }