登录用户在Firebase中通过Facebook登录iOS Swift后如何检查?

时间:2018-08-28 09:57:18

标签: ios swift firebase firebase-authentication facebook-login

我的应用正在使用Firebase登录Facebook和电子邮件密码。现在,对于那些使用Facebook签名的用户,我不想验证他们的电子邮件。但在Auth.auth().currentUser?.isEmailVerified中,它始终返回false。因此,有没有其他方法可以检测到用户已使用Facebook登录。我知道我可以在登录之前在用户默认值中存储值,但是在卸载并重新安装应用后,我将失去该用户默认值。在firebase保持用户登录状态的同时。我可以为此使用钥匙串,但是如果firebase直接提供钥匙串,则可以轻松进行编码。

4 个答案:

答案 0 :(得分:6)

您可以使用:

    if let user = Auth.auth().currentUser {

       if FBSDKAccessToken.current() != nil {
           // logged in using facebook
       }
       else {
           // logged in using manual email/password method
       }
    }

因此您可以仅向使用电子邮件/密码方法登录的用户发送验证电子邮件。

答案 1 :(得分:2)

我找到了一种使用Firebase方法的解决方案:

if let providerData = Auth.auth().currentUser?.providerData {
    for userInfo in providerData {
        switch userInfo.providerID {
        case "facebook.com":
            print("Facebook Login")
            //isVerifiededUser = true
        default:
            print("provider is \(userInfo.providerID)")
        }
    }
}

答案 2 :(得分:1)

Firebase没有提供一种方法来显示哪种方法是用于创建Firebase帐户的第一种方法。您将拥有一个附加到Firebase用户的所有提供商的列表,并附带了他们的电子邮件/电话号码。

Firebase默认情况下仅设置经过Google SignIn验证的电子邮件,对于其他提供商,Firebase的行为是设置为false(尽管有时它确实将验证的电子邮件设置为随机)。 原因是Firebase无法保证电子邮件已在其平台上被facebook验证,但如果Google firebase受到信任。

一种选择是,无论Facebook或电子邮件身份验证,您始终发送验证电子邮件。其次,您放弃了电子邮件密码登录,而使用新的电子邮件链接身份验证,从而消除了密码登录所需的电子邮件身份验证。

编辑:

如果您一次只允许使用一种方法,则可以从Firebase用户处获取提供商列表,并检查提供商列表中是否存在“密码”登录方法,在检查已验证的电子邮件之后发送验证电子邮件,否则不要发送电子邮件并继续运行应用程序

以下是电子邮件链接身份验证的资源:https://firebase.google.com/docs/auth/ios/email-link-auth

答案 3 :(得分:0)

此代码表示在某个时候用户已使用Facebook注册,但这并不意味着该用户正在使用此提供程序进行访问。如果用户具有这些提供程序[“ google.com”,“ facebook.com”],它也将返回true。 ??

fileprivate func userHasFBProvider() -> Bool{
    
    var fBProvider = false
    
    guard let providerData = Auth.auth().currentUser?.providerData else {
        return fBProvider
    }
    
    for userInfo in providerData {
        switch userInfo.providerID {
        case "facebook.com":
            
            fBProvider = true
            
        default:

            fBProvider = false
            
        }
    }
    
    return fBProvider
}