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

如何在Supabase的Google OAuth中请求用户同意获取生日、性别及手机号?

关于Supabase Google OAuth请求生日、性别和手机号权限的问题解答

你当前的写法可以通过OAuth授权流程请求用户同意共享这些信息,但有几个关键细节需要注意:

  • 权限范围(Scopes)要精准
    你写的birthdate、gender不是Google官方认可的标准scope,得换成对应People API的权限:

    • 生日:https://www.googleapis.com/auth/user.birthday.read
    • 性别:https://www.googleapis.com/auth/user.gender.read
    • 手机号:https://www.googleapis.com/auth/userinfo.phone
      修正后的scopes配置要确保Google能识别并弹出对应的授权请求。
  • Supabase不会自动返回所有字段
    就算用户授权了,Supabase的默认user对象里只会包含基础信息(比如邮箱、姓名),生日、性别、手机号这类额外字段需要你用登录后拿到的provider_token(也就是Google的access_token)去调用Google People API主动获取。

  • 额外配置不能少
    必须在Google Cloud Console里启用People API,否则调用接口会直接报错;另外,如果你的应用是公开上线的,手机号这类敏感权限需要提交Google的应用验证,不然普通用户授权时会看到"应用未验证"的警告,甚至没法完成授权。

修正后的登录代码示例

const { data, error } = await auth.signInWithOAuth({
    provider: 'google',
    options: {
        queryParams: {
            access_type: 'offline',
            prompt: 'consent',
        },
        // 替换为标准的Google权限scope
        scopes: 'profile https://www.googleapis.com/auth/userinfo.phone https://www.googleapis.com/auth/user.birthday.read https://www.googleapis.com/auth/user.gender.read',
        redirectTo: window.location.origin + '/api/login',
    },
});

授权后获取额外信息的示例

登录成功后,从Supabase会话里拿到access_token,调用People API拉取数据:

// 获取当前用户会话
const session = await auth.getSession();
if (session?.provider_token) {
    try {
        const response = await fetch(
            'https://people.googleapis.com/v1/people/me?personFields=birthdays,genders,phoneNumbers',
            {
                headers: {
                    'Authorization': `Bearer ${session.provider_token}`
                }
            }
        );
        const userDetails = await response.json();
        // 这里可以拿到生日、性别、手机号数据
        console.log('用户额外信息:', userDetails);
    } catch (apiError) {
        console.error('获取用户信息失败:', apiError);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 20:22:49