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

如何通过Google Passport OAuth获取用户头像与性别等额外信息

如何通过Google Passport获取用户头像、性别等额外信息

1. 调整OAuth授权范围

Google默认的profile权限仅提供基础个人信息,若要获取性别,需添加专门的读取权限。更新GoogleStrategy配置中的scope数组,补充性别读取权限:

scope: ["profile", "email", "https://www.googleapis.com/auth/user.gender.read"]

2. 从Profile对象提取额外字段

在回调函数的profile参数中,可直接获取以下信息:

  • 头像:profile.photos[0].value(取用户的首项头像URL,部分用户可能无头像,建议做空值判断)
  • 性别:profile.gender(添加权限后返回,可能为male/female/undefined,取决于用户隐私设置)

修改后的完整代码

exports.googlePassport = catchAsync(async (req, res, next) => {
    passport.use(new GoogleStrategy({
        clientID: process.env.GOOGLE_CLIENT_ID,
        clientSecret: process.env.GOOGLE_CLIENT_SECRET,
        callbackURL: "http://localhost:8001/api/v1/user/google/callback",
        // 新增性别读取权限
        scope: ["profile", "email", "https://www.googleapis.com/auth/user.gender.read"]
    }, async (profile) => {
        const newUser = {
            googleId: profile.id,
            firstname: profile.name.givenName,
            lastname: profile.name.familyName,
            email: profile.emails[0].value,
            // 添加头像字段,可选链避免空值报错
            avatar: profile.photos?.[0]?.value,
            // 添加性别字段
            gender: profile.gender
        };
        // 后续可执行将newUser存入数据库等业务操作
    }));
})

注意事项

  • 若用户未公开性别信息,profile.gender会返回undefined,需在业务逻辑中处理空值情况
  • 谷歌返回的头像URL可能存在有效期限制,若需长期存储,建议下载图片到自有服务器后存储本地地址

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:32:41