Firebase身份验证:在Swift中链接多个帐户

时间:2016-07-28 11:02:18

标签: swift firebase firebase-authentication

我已经使用Facebook,Google和Google为我的iOS应用设置了Firebase身份验证电子邮件/密码登录,一切正常。此身份验证仅在用户想要访问我的应用程序的高优先级部分时发生(即我不需要用户登录才能开始使用该应用程序)。

在应用启动时,我会在后台匿名签署用户,而且工作正常。

我已阅读documentation,但我很难理解使我能够将匿名帐户链接到以下流程中的帐户登录的Facebook /电子邮件所需的代码:

  • 新用户打开应用
  • 用户在后台匿名登录(新用户。已创建“A”)
  • 针对Firebase实时数据库中的匿名用户存储的低优先级数据
  • 用户点击高优先级区域,因此需要进行身份验证
  • 用户使用Facebook登录(新用户。已创建“B”)
  • 上一个user.uid“A”需要链接到user.uid“B”

我的方法目前看起来像这样:

func signupWithFacebook(){
    // track the anonymous user to link later
    let prevUser = FIRAuth.auth()?.currentUser

    FBSDKLoginManager().logInWithReadPermissions(["public_profile", "email"], fromViewController: self) { (result, error) in
        if let token = result?.token?.tokenString {
            let credential = FIRFacebookAuthProvider.credentialWithAccessToken(token)

            FIRAuth.auth()?.signInWithCredential(credential, completion: { (user, error) in
                if user != nil && error == nil {
                    // Success
                    self.success?(user: user!)
                    dispatch_async(dispatch_get_main_queue(), {
                        self.dismissViewControllerAnimated(true, completion: nil)
                    })

                }
            })
        }
    }
}

任何消除混淆的指针都会很棒。

更新 我已经意识到我对应用程序逻辑感到困惑,因为用户是在测试期间创建的。而不是为上述场景创建2个单独的用户(一个通过Facebook和另一个匿名验证),所有发生的事情是原始的匿名user.uid“A”与某些Facebook身份验证凭据“链接”。在Firebase控制台中,匿名uid将从匿名更改为旁边的Facebook徽标。

这就是我的工作方法:

func signupWithFacebook(){
    FBSDKLoginManager().logInWithReadPermissions(["public_profile", "email"], fromViewController: self) { (result, error) in
        if let token = result?.token?.tokenString {
            let credential = FIRFacebookAuthProvider.credentialWithAccessToken(token)

            FIRAuth.auth()?.currentUser!.linkWithCredential(credential) { (user, error) in
                if user != nil && error == nil {
                    // Success
                    self.success?(user: user!)
                    dispatch_async(dispatch_get_main_queue(), {
                        self.dismissViewControllerAnimated(true, completion: nil)
                    })
                } else {
                    print("linkWithCredential error:", error)
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:4)

因此,您的代码遵循this链接中的前两个步骤。但文档明确指出不要打{{1​​}}而是打电话

ui:repeat

从Facebook的SDK中获取凭证后。

来自链接的引用:signInWithCredential