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

使用Firebase SDK实现Google登录时,强制获取生日权限的方案咨询

问题:Firebase Google登录强制获取生日授权或检测授权状态

我正在使用Firebase SDK在React前端实现Google登录功能。当用户首次登录时,需调用后端接口将其注册到数据库,而注册要求用户年龄满14周岁,因此必须获取用户生日信息。我的认证代码如下:

const provider = new GoogleAuthProvider();
provider.addScope('https://www.googleapis.com/auth/user.birthday.read');
provider.addScope('https://www.googleapis.com/auth/userinfo.profile');
const googleRes = await signInWithPopup(auth, provider);
const credential = GoogleAuthProvider.credentialFromResult(googleRes);

若用户同意授权生日信息即可完成注册,但当前弹窗允许用户拒绝共享生日信息。由于生日信息是必填项,我需实现以下方案之一:

  • 强制用户授权生日信息,否则无法完成登录;
  • 在代码中检测用户是否授权该权限,以便告知用户问题或提供解决方案。

请问是否有可行的实现方式?

注:若用户首次拒绝授权,第二次登录时Google不再显示勾选框,直接提示将共享生日信息,这正是我期望首次登录的表现。我已尝试添加额外权限并检查SDK返回对象,但未找到判断授权状态的相关信息。


解决方案

一、检测用户是否授权生日权限

Firebase登录返回的结果里不会直接包含权限状态,你可以通过调用Google People API来验证用户是否授予了生日读取权限:

  1. 从登录结果中获取用户的ID Token:
const idToken = await googleRes.user.getIdToken();
  1. 编写函数调用People API检查权限及生日信息:
async function checkBirthdayPermission(idToken) {
  try {
    const response = await fetch('https://people.googleapis.com/v1/people/me?personFields=birthdays', {
      headers: {
        'Authorization': `Bearer ${idToken}`
      }
    });
    const data = await response.json();
    // 若请求失败或未返回生日数据,说明未授权
    if (!response.ok || !data.birthdays || data.birthdays.length === 0) {
      return false;
    }
    return true;
  } catch (error) {
    console.error('权限检查失败:', error);
    return false;
  }
}
  1. 登录后验证权限,未授权则提示并重新触发登录:
const hasBirthdayAccess = await checkBirthdayPermission(idToken);
if (!hasBirthdayAccess) {
  alert('请授权生日信息以完成注册');
  // 重新登录时Google会强制要求授权,符合你期望的表现
  await signInWithPopup(auth, provider);
}

二、强制首次登录即要求授权生日信息

通过配置Google Cloud Console的OAuth同意屏幕,可将生日权限设为必填,让用户无法拒绝:

  • 进入Google Cloud Console,找到你的项目,进入「API和服务」→「OAuth同意屏幕」
  • 在「Scopes for Google APIs」中,将https://www.googleapis.com/auth/user.birthday.read标记为必填(该权限属于敏感范围,支持设为必填)
  • 保存配置后,首次登录弹窗会强制用户授权该权限,否则无法完成登录流程

补充注意事项

  • 使用People API前,需确保你的Google Cloud项目已启用People API(在API库中搜索并启用)
  • 两种方案都能满足你的需求,若需更灵活的提示逻辑,选API检测方案;若要直接强制授权,选控制台配置方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:45:10