ios - 无法在 Firebase 身份验证中链接 Facebook 和 Google

标签 ios iphone swift firebase firebase-authentication

我正在尝试链接 Facebook 和 Google。所以,场景是这样的:

我已经通过 Google 进行了身份验证。所以,现在我正在登录 Facebook,使用之前在 Google 上使用的相同电子邮件 ID。因此,我收到帐户存在不同凭据的错误。而且,我这样做了:

func fetchUserInfo()
{
    Auth.auth().signInAndRetrieveData(with:FacebookAuthProvider.credential(withAccessToken: (FBSDKAccessToken.current().tokenString)!), completion: { (result, error) in

        if let error = AuthErrorCode.init(rawValue: error!._code)
        {
            switch error
            {
            case .accountExistsWithDifferentCredential :

                let credential = FacebookAuthProvider.credential(withAccessToken: (FBSDKAccessToken.current()?.tokenString)!)

                Auth.auth().currentUser?.linkAndRetrieveData(with: credential, completion: { (result, error) in

                    if let error = error
                    {
                        print("Unable to link Facebook Account", error.localizedDescription)
                    }

                    else
                    {
                        NavigationHelper.shared.moveToHome(fromVC: self)
                    }
                })
            default: break
            }
        }
        else
        {
            GeneralHelper.shared.keepLoggedIn()

            if let currentUser = Auth.auth().currentUser
            {
                print(currentUser.email!)
            }
            NavigationHelper.shared.moveToHome(fromVC: self)
        }
    })
}

这里 Firebase 文档说我们只需链接 currentUser 并检索数据。但是,我面临的问题是 currentUser 始终为零。那么,如何获取当前用户呢?我几个月前就已经尝试过了,然后我就能够链接 Facebook、Google 和电子邮件。我需要从 Google signInAndRetrieve 获取数据才能获取 currentUser 吗?

最佳答案

错误“帐户存在不同的凭据”是因为默认情况下,Firebase 不允许对两种(或更多)不同的登录方法使用相同的电子邮件地址。您需要启用此选项。

1 - 转到身份验证> 登录方法

Authentication > Sign-in method

2 - 向下滚动到高级:每个电子邮件地址多个帐户

Advanced

3 - 将选项更改为允许使用同一电子邮件地址创建多个帐户

enter image description here

仅供引用:您需要为应用程序中的每个登录方法执行整个登录过程。每个方法都有自己的凭据。

希望这有帮助。

关于ios - 无法在 Firebase 身份验证中链接 Facebook 和 Google,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52947793/

相关文章:

iphone - 在不同的 UIViewControllers 中重用自定义 UITableView

ios - iOS 中的 NSString 到 NSData

iphone - 从 iPhone 中的弹出窗口导航到另一个窗口

ios - 在 iOS 中加载某些事件时如何禁用导航栏后退按钮?

ios - 从 iTunes 安装 ipa 文件

Swift Cloud Firestore 自定义对象映射

ios - UITableView 部分中的背景图像隐藏部分标题

iphone - 使用 iphone 上的 HTML5 视频元素,如何检测 "pause"和 "done"之间的差异?

swift - 如果变量为nil,如何返回函数?

swift - 是否可以将 Enum 值与 'if' 语句进行比较?