You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Auth报错:AuthDataResult类型无displayName成员求助

解决Firebase登录时角色判断的报错问题

嘿,我来帮你搞定这个登录环节的报错问题!

你遇到的错误核心原因很明确:Firebase Auth的登录回调返回的user参数是AuthDataResult类型,它本身没有displayName属性——用户的个人信息需要通过AuthDataResult的user子属性才能访问到。

错误代码拆解

你当前的登录判断逻辑:

if user?.displayName == "Lehrer" {

这里的user是AuthDataResult?类型,而真正存储用户displayName的是AuthDataResult内部的User对象,也就是user?.user。

修改后的登录逻辑代码

把登录部分的代码改成这样就能解决报错:

// LOG IN
Auth.auth().signIn(withEmail: email, password: password, completion: { (authResult, error) in
    if error != nil {
        self.displayAlert(title: "Error", message: error!.localizedDescription)
    } else {
        // 先从authResult中取出真实的User对象
        if let currentUser = authResult?.user {
            if currentUser.displayName == "Lehrer" {
                // 跳转到教师专属界面
                self.performSegue(withIdentifier: "lehrerSegue", sender: nil)
            } else {
                // 跳转到普通用户界面
                self.performSegue(withIdentifier: "benutzerSegue", sender: nil)
            }
        }
    }
})

额外优化小建议

另外,你注册环节的commitChanges(completion: nil)是异步操作,直接在调用后执行Segue可能会出现displayName还没同步到Firebase就跳转的情况,建议改成等待回调完成后再跳转,避免潜在的角色判断异常:

// 注册时的教师角色设置部分
req?.commitChanges(completion: { error in
    if let error = error {
        self.displayAlert(title: "Error", message: error.localizedDescription)
    } else {
        self.performSegue(withIdentifier: "lehrerSegue", sender: nil)
    }
})

普通用户角色的注册逻辑也可以做同样的修改。

这样调整后,登录时就能正确读取用户的角色信息,跳转到对应的界面啦。

内容的提问来源于stack exchange,提问作者Manatee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:10:28