java - 检查用户是否通过密码验证或使用某些提供商

标签 java android firebase firebase-authentication

我的应用程序中有简单的用户名和密码、Facebook 和 Google 身份验证。我想对密码 Authenticated 用户执行不同的操作。

代码

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

最佳答案

如果您使用以下 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 这意味着用户已通过用户名和密码进行身份验证,但此声明不正确!在这两种情况下,用户都使用用户名和密码进行身份验证。在 facebook.com 的情况下,用户将使用来自 facebook 的凭据进行身份验证,而在 google.com 的情况下,用户将使用来自 facebook 的凭据进行身份验证来自 GoogleSignInAccount 对象。

那么如果您使用该 if 语句会发生什么情况,首先它会评估用户是否通过用户名和密码进行身份验证,这显然是因为 user != null 然后将尝试找到 providerId,可以是facebook.comgoogle.com。这就是为什么显示 Toast 消息的顺序是 使用 Simmple 方法 和第二个 使用 fb 或 goole 方法

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

关于java - 检查用户是否通过密码验证或使用某些提供商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51886378/

相关文章:

java - 在 groovy 中使用 Logback 和 RollingFilePolicy

android - 在 requestNewReadPermissions 然后 requestNewPublishPermissions 之后未调用 StatusCallback

android - GoogleSignIn.getLastSignedInAccount() 在发布版本上返回 null

android - 使用 Firebase UI 依赖项的重复条目 Gradle 错误

java - 如何获取灰度图像中的像素值

java - 多对多 Spring Jpa 删除不起作用

java - 需要抑制第二个重复字符串的 sops。

android - 将图片目录导入到Android Studio中的drawable资源中

android - 使用用户名和密码验证删除 Firebase 用户

swift - 是否可以将文件从 Swift 应用程序发送到 Firebase 中的可调用函数?