Firebase Auth - 获取提供商ID

Dim*_*ira 15 ios firebase firebase-authentication swift3

我正在使用以下代码来检测身份验证提供程序并正确注销

static func logOut() {
    let auth = FIRAuth.auth()!
    let provider = auth.currentUser?.providerID
    switch provider! {
        case "Facebook": FBSDKLoginManager().logOut()
        case "Google": GIDSignIn.sharedInstance().signOut()
        case "Twitter": Twitter.sharedInstance().sessionStore.logOutUserID(TWTRAPIClient.withCurrentUser().userID!)
        default:
            print("Unknown provider ID: \(provider!)")
            return
    }
    try! auth.signOut()
}
Run Code Online (Sandbox Code Playgroud)

但提供商始终是"Firebase".我究竟做错了什么?0_o当我登录twitter时,该代码抛出"Facebook".提前致谢

UPD:是的,我实际上可以存储身份验证提供程序UserDefaults,但可能是Firebase错误.我正在使用Firebase SDK 3.5.2

Fra*_*len 25

由于用户可以使用多个提供商登录其Firebase身份验证帐户,因此现在(通常)是顶级提供商ID Firebase.

但它currentUser有一个providerData属性,提供有关特定提供商的信息.循环FIRAuth.auth()!.currentUser.providerData将给你FIRUserInfo.providerID你正在寻找.

另请参阅有关UID的问题,这些问题处于类似情况:Firebase会返回多个ID,这是唯一的ID?


Ale*_*ign 8

Swift 4解决方案:

   if let providerData = Auth.auth().currentUser?.providerData {
        for userInfo in providerData {
            switch userInfo.providerID {
            case "facebook.com":
                print("user is signed in with facebook")
            case "google.com":
                print("user is signed in with google")
            default:
                print("user is signed in with \(userInfo.providerID)")
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)


小智 6

我不得不JSON.stringify(currentUser.providerData) 为了看看它是如何组织的:

字符串化结果

我终于找到了Auth Provider这样的:

currentUser.providerData[0].providerId
Run Code Online (Sandbox Code Playgroud)

干杯,用你的代码 :)