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

Google Drive OAuth 2.0登录时如何获取用户邮箱ID(权限添加后仍无效)

解决Google OAuth 2.0无法获取用户邮箱的问题

1. 强制用户重新授权新权限

添加userinfo.email权限后,之前生成的令牌(access/refresh token)不会自动包含新增权限。必须让用户重新走授权流程,确保新权限被纳入:

const authorizationUrl = oauth2Client.generateAuthUrl({
  access_type: 'offline',
  scope: scopes,
  prompt: 'consent' // 强制用户重新确认权限,覆盖旧授权
});

2. 主动调用API获取用户邮箱

添加权限只是获得了调用权限,需要主动请求用户信息接口才能拿到邮箱。用Google官方客户端库实现:

// 在成功获取access token后执行
const oauth2 = google.oauth2({
  auth: oauth2Client,
  version: 'v2'
});

oauth2.userinfo.get()
  .then(res => {
    console.log('用户邮箱:', res.data.email);
  })
  .catch(err => {
    console.error('获取用户信息失败:', err);
  });

如果不想依赖客户端库,也可以直接调用REST接口:

const axios = require('axios');

axios.get('https://www.googleapis.com/oauth2/v2/userinfo', {
  headers: {
    'Authorization': `Bearer ${oauth2Client.credentials.access_token}`
  }
})
.then(res => {
  console.log('用户邮箱:', res.data.email);
})
.catch(err => {
  console.error('请求失败:', err);
});

3. 改用OpenID Connect标准范围

推荐替换userinfo.email为OpenID Connect的标准范围,兼容性更稳定:

const scopes = [
  'https://www.googleapis.com/auth/drive.metadata.readonly',
  'https://www.googleapis.com/auth/drive',
  'openid', // 必须搭配email使用
  'email'
];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:10:37