【问题标题】:Swift3 iOS -Firebase FIREmailPasswordAuthProvider Not WorkingSwift3 iOS -Firebase FIREmailPasswordAuthProvider 不工作
【发布时间】:2017-12-20 20:43:37
【问题描述】:

我刚刚将 Firebase Cocoapods 从 3.15.0 升级到 4.0.4,并将 FirebaseAuth Cocoapods 从 3.1.1 升级到 4.0.0。

我正在使用电子邮件和密码来验证用户身份。当用户更改他们的电子邮件时,我在下面使用此方法并且一切正常:

FIREmailPasswordAuthProviderID.credential(withEmail: emailTextField.text!, password: passwordTextField.text!)

现在我更新了,我收到了错误消息

“字符串”类型的值没有成员“凭据”

我看了docs,说用下面的方法:

问题是我得到了同样的错误:

FIREmailAuthProviderID.credential(withEmail: emailTextField.text!, password: passwordTextField.text!)

“字符串”类型的值没有成员“凭据”

下面是我的原始代码

import Firebase
import FirebaseAuth

let user: User?

let credential = FIREmailPasswordAuthProviderID.credential(withEmail: emailTextField.text!, password: passwordTextField.text!)

        if let user = user{
            user.reauthenticate(with: credential, completion: {
                (error) in
                if error != nil{
                    //...do something
                    return
                }
                //...do something else
            })
        }

我做错了什么?

【问题讨论】:

    标签: ios swift firebase firebase-authentication credentials


    【解决方案1】:

    等一下

    FIREmailAuthProviderID 是一个常量,其中包含身份验证提供程序 id 并且是一个字符串(在 FB 4 中是 EmailAuthProviderID)。没有凭据功能,这就是您收到该错误的原因。

    这是Firebase 4 Migration Guide的链接

    新格式(和正确的函数调用)是

    EmailAuthProvider.credential(withEmail email: String, password: 字符串)-> AuthCredential

    20171014 编辑:更新了最新迁移指南的链接。

    【讨论】:

    • 嘿,感谢您的帮助!我昨晚又试了一次,我得到了错误“使用未解析的标识符'EmailPasswordAuthProvider'
    • @LanceSamaria 这是 EmailAuthProvider 而不是 EmailPasswordAuthProvider
    • “指向 Firebase 4 更改的链接”已损坏。 Here's another list of release notes
    【解决方案2】:

    我没有使用 fireBase 的这个功能,但是这个链接看起来可能会有所帮助

    https://firebase.google.com/docs/reference/ios/firebaseauth/api/reference/Classes/FIREmailAuthProvider

    【讨论】:

    • 感谢您的帮助!在发布问题之前,我实际上尝试了该方法,但它没有用。现在想来,也是同样的方法。我只是看着它,它是一个类函数。这就是我在问题代码中使用的内容
    • 我正在阅读 Firebase 文档,并且有一种更新用户电子邮件的方法
    • user.updateEmail(to: "firebase_rox42@gmail.com") { error in // 检查错误 }
    • 可以试试 let credential = credential(withEmail: emailTextField.text!, password: passwordTextField.text!)
    • 我实际上在其他地方也有这种方法,而且效果很好。您也可以像在 user.updatePassword 中一样更新密码,但您需要在允许更新之前验证其他旧电子邮件和密码是否正确,这就是该方法的用武之地,因为两条信息必须匹配。如果他们忘记了密码,那么我有一个忘记密码警报来帮助他们。但是用户应该验证两者以更新。谢谢???
    【解决方案3】:

    我认为您需要使用 EmailAuthProviderID 而不是 FIREmailAuthProviderID。在 Firebase 4.0 中不再使用 FIR 后缀。

    希望对你有帮助:)

    【讨论】:

    • 感谢您的帮助:我尝试过(以及其他方法的组合),但仍然无法正常工作。
    • 这不是一个正确的答案,但它的内容是正确的。 EmailAuthProviderID 是一个字符串而不是一个类,因此它没有 .credential 函数。
    猜你喜欢
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 2023-03-10
    • 2017-04-06
    • 1970-01-01
    相关资源
    最近更新 更多