【问题标题】:Value of type 'AuthDataResult' has no member 'providerID' Firebase 5.0“AuthDataResult”类型的值没有成员“providerID”Firebase 5.0
【发布时间】:2018-07-30 08:31:11
【问题描述】:

我对最新版本的 FirebaseAuth 5.0 有疑问 这是我的代码:

func registerUser (withEmail email: String, andPassword password: String, userCreationComplete: @escaping (_ status: Bool, _ error: Error?) -> ()){
    Auth.auth().createUser(withEmail: email, password: password) { (user, error) in
        guard let user = user else{
            userCreationComplete(false, error)
            return
        }
        let userData = ["provider": user.providerID, "email": user.email]
        DataService.instance.createDBUser(uid: user.uid, userData: userData)
        userCreationComplete(true, nil)
    }

}

问题是“'AuthDataResult'类型的值没有值“ProviderID””但在firebase 4中这个方法有效。谢谢!

【问题讨论】:

    标签: ios firebase firebase-authentication


    【解决方案1】:

    根据reference docscreateUser 函数通过(FIRAuthDataResult?, Error?) 传递一个完成块。 FirAuthDataResultUser 不同,但它有一个User 作为属性,可以这样访问:

    func registerUser (withEmail email: String, andPassword password: String, userCreationComplete: @escaping (_ status: Bool, _ error: Error?) -> ()){
        Auth.auth().createUser(withEmail: email, password: password) { (authResult, error) in
            guard let user = authResult.user else {
                userCreationComplete(false, error)
                return
            }
            let userData = ["provider": user.providerID, "email": user.email]
            DataService.instance.createDBUser(uid: user.uid, userData: userData)
            userCreationComplete(true, nil)
        }
    }
    

    【讨论】:

    • 你忘记了guard let user = authResult?.user中的可选引用
    【解决方案2】:
    func registerUser(withEmail email: String, andPassword password: String, userCreationComplete: @escaping (_ status: Bool, _ error: Error?) -> ()) {
        Auth.auth().createUser(withEmail: email, password: password) { (authResult, error) in
            guard let user = authResult?.user else {
                userCreationComplete(false, error)
                return
            }
    
            let userData = ["provider": user.providerID, "email": user.email]
            DataService.instance.createDBUser(uid: user.uid, userData: userData)
            userCreationComplete(true, nil)
        }
    }
    

    【讨论】:

    • 欢迎来到 Stack Overflow!请带上tour 并通读help center,特别是如何提问。你最好的选择是做你的研究,搜索关于 SO 的相关主题,然后试一试。在进行更多研究和搜索后,发布您的尝试Minimal, Complete, and Verifiable example,并具体说明您遇到的问题,这可以帮助您获得更好的答案。
    • 能否请您为您的答案添加更多上下文。仅代码的答案很难理解。如果您可以在帖子中添加更多信息,它将帮助提问者和未来的读者。另见Explaining entirely code-based answers
    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多