【问题标题】:Get providerData from Firebase User从 Firebase 用户获取 providerData
【发布时间】:2017-07-28 08:51:27
【问题描述】:

我正在尝试在我的应用程序中添加取消链接提供程序功能。我想添加一个按钮,将用户的 Facebook 帐户与他们的 Firebase 用户帐户取消链接。 Firebase 文档说要使用 providerData 数组,但我不知道如何从中提取 Facebook 提供程序 ID。如果我只使用let providerID = self.currentUser.providerID,它只是默认为数组中的第一个提供者,而不管类型是什么(Facebook、Twitter、Firebase 等)。

如何从 providerData 中提取 Facebook 提供商 ID?这就是我尝试获取它的方式,但它出错(“无法使用 String 的索引类型为 [String] 类型的值下标”):

guard let providerData = self.currentUser?.providerData else {return}
        var providerArray: [String] = []
        for provider in providerData{
            providerArray.append(provider as! String)
        }
        var providerID: String = providerArray["Facebook"]
        FIRAuth.auth()?.currentUser?.unlink(fromProvider: providerID) { (user, error) in

编辑:

使用

修复
FIRAuth.auth()?.currentUser?.unlink(fromProvider: "facebook.com" ) { (user, error) in

【问题讨论】:

    标签: ios facebook firebase swift3 firebase-authentication


    【解决方案1】:

    您正尝试像字典一样访问providerArray,但这是行不通的。您正在寻找的是专门用于 Facebook 的 providerId。为了检索它,您需要获取 Facebook 的 FIRAuthCredential。为此,您应该使用FIRFacebookAuthProvider。这将为您提供凭证,您可以从凭证中获取 providerId,将其与当前用户的 providerId 数组匹配,就像您正在做的那样。然后按照您的尝试取消链接。

    【讨论】:

    • 感谢您的回复!实际上,我只是通过将“facebook.com”作为 providerID 传递来解决了这个问题。如果存在 Facebook 身份验证令牌,我只会显示取消链接按钮
    • 没关系。考虑到如果他们在 API 中更改该值,那么我可能不会使用这样的字符串,那么您的代码将无法工作:/ 只是一个建议!
    • @james 我会使用我上面发布的逻辑来获取它。
    【解决方案2】:

    我通过仅在存在 Facebook 身份验证令牌时显示取消链接按钮来解决此问题。然后,当按下按钮时,只需传入“facebook.com”作为 providerID:

    FIRAuth.auth()?.currentUser?.unlink(fromProvider: "facebook.com" ) { (user, error) in
    

    【讨论】:

      猜你喜欢
      • 2019-05-28
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 2020-10-18
      • 2020-10-05
      相关资源
      最近更新 更多