Firebase使用signInWithCredential登录时displayName为null的问题
Google登录后displayName为null的原因及解决方法
这是预期结果吗?
是预期结果。你当前的登录方式仅验证了用户身份并获取了邮箱、头像等基础信息,但未请求获取用户显示名称(displayName)的权限,因此返回null属于正常情况。
如何获取displayName?
要获取displayName,需确保在Google授权流程中请求profile权限,可通过以下两种方式处理:
1. 初始化GoogleAuthProvider时指定权限范围
创建Google授权提供者时,添加profile权限,确保授权流程获取用户个人资料信息:
const provider = new GoogleAuthProvider(); // 添加profile权限以获取displayName provider.addScope('profile'); // 若需邮箱权限可补充,你已能获取email可根据情况选择 provider.addScope('email'); // 通过标准弹窗或跳转方式完成登录 const result = await signInWithPopup(auth, provider); const user = result.user; console.log(user.displayName); // 此时可正常获取值
2. 若必须使用signInWithCredential方式
确保你的token是通过包含profile权限的授权流程获取的。比如前端请求Google授权token时,需在请求参数中包含scope=openid%20email%20profile,这样拿到的token才能解析出displayName,再传入GoogleAuthProvider.credential中使用。
注意:即便用户Gmail账号已设置姓名,若授权流程未请求profile权限,Firebase Auth仍不会返回displayName字段。
内容的提问来源于stack exchange,提问作者sir-haver
相关产品推荐
相关产品推荐

