【问题标题】:How to check if Google/Facebook account has already been used to create account on Firebase Auth如何检查 Google/Facebook 帐户是否已用于在 Firebase Auth 上创建帐户
【发布时间】:2020-05-11 10:26:30
【问题描述】:

我目前正在使用 Firebase 身份验证注册/登录我的应用。 我有 Facebook 注册/登录和 Google 注册/登录的自定义按钮。

例如,Facebook 注册/登录按钮的代码是

@objc private func performFacebookLogin(_ sender: UIButton) {
        let fbLoginManager : LoginManager = LoginManager()
        fbLoginManager.logIn(permissions: ["email"], from: self) { (result, error) -> Void in
            if let error = error {
                print(error)
            } else {
                if result == nil {
                    print("no result!")
                    return
                }
                if AccessToken.current == nil {
                    print("no token")
                    return
                }
                DispatchQueue.main.async {
                    ThirdPartySignupViewController.push(fromVC: self, method: .facebook)
                }
            }
        }
    }

如果用户尚未使用此 Facebook 帐户在应用中创建帐户,这会将用户带到另一个视图控制器以向他们的帐户添加其他信息。

但是,我找不到任何方法来确定 Facebook 帐户以前是否曾用于应用程序中的帐户,在这种情况下,我只想让用户登录并将他们带到主屏幕。有没有办法做到这一点?

我已经尝试了signIn(with:) 方法,希望如果应用程序中没有具有此 Facebook 帐户凭据的帐户,它会返回错误,但这将不起作用,因为这最终会创建一个新帐户,如果该 Facebook 帐户之前未用于创建帐户。

let credential = FacebookAuthProvider.credential(withAccessToken: AccessToken.current!.tokenString)
Auth.auth().signIn(with: credential) { (authResult, error) in
   //check if I get an error if the Facebook account has not been used             
}

(编辑)所需的流程是 1.使用 Facebook/Google 登录 → 2.输入其他信息 → 3.在 Firebase 身份验证上创建帐户。

【问题讨论】:

    标签: ios swift facebook firebase firebase-authentication


    【解决方案1】:

    使用 Firebase 进行身份验证时 - Auth 对象返回 isNewUseradditionalUserInfo。因此,您可以查看新用户或现有用户的状态。

    let credential = FacebookAuthProvider.credential(withAccessToken: AccessToken.current!.tokenString)
        Auth.auth().signIn(with: credential) { (authResult, error) in
            //authResult?.additionalUserInfo?.isNewUser
            if let auth = authResult{
                if auth.additionalUserInfo?.isNewUser {
                    // User has not been authenticated before. Do what you need
                } else {
                    // User has been authenticated before
                }
            }
        }
    

    【讨论】:

    • 我在发帖前也试过这个,但正如我在问题中所说,.signIn(with:) 将在检查用户是否是新用户之前创建一个新帐户。所需的流程是 1.使用 Facebook/Google 登录 → 2.输入其他信息 → 3.在 Firebase 身份验证上创建帐户。
    • “创建新帐户”是什么意思? -- 鉴于credential 是同一个firebase 不会在Authentication 中创建新用户。
    • 我的意思是在数据库上为我的应用程序创建一个帐户。所以,我基本上使用 Facebook 和 Google 登录以及电子邮件/密码,这样在我的应用程序上创建帐户会更容易(无需输入电子邮件、姓名等),但帐户在用户在 Facebook/Google 登录后出现的视图控制器上输入其他必要信息并按“创建帐户”之前,该应用程序不会在我的数据库中创建。
    • 但是,如果我使用signIn(with:),无论用户最终是否在应用程序上创建帐户,都会将用户添加到 Firebase 身份验证中,我认为这是不必要的。我认为最好仅在用户在数据库上创建帐户后将用户添加到 Firebase 身份验证,我想知道是否有办法做到这一点。
    • 此方法目前不被支持也不是好的做法。您需要做的是缓存用户 facebook 令牌并在提供所有数据后继续入职并创建帐户。但是,这并不能回答您的问题。您可以登录用户,如果发生错误,即;找不到帐号,请继续登录。但是,如果用户只是输入了错误的凭据,那么这是一个糟糕的 UX。最终,使用您的最佳判断,但没有明确的、受支持的方法来解决您的问题。还有什么让我知道。
    猜你喜欢
    • 2011-02-25
    • 2021-10-23
    • 2018-01-13
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    相关资源
    最近更新 更多