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
相关产品推荐
相关产品推荐

