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

GitHub OAuth2设置user:email权限失败,调用/emails接口返回404

GitHub OAuth2 user:email权限不生效问题解决

核心问题

你把scope=user:email参数加在了获取access_token的POST请求里,这是错误的。GitHub OAuth的权限范围(scope)必须在**用户授权的第一步(跳转GitHub登录页面)**时指定,后续换令牌的请求无法新增未授权的权限。

正确操作步骤

  1. 在授权跳转阶段传递scope参数
    用户登录授权的跳转URL必须包含scope=user:email,示例代码:
// 跳转用户授权页面的代码
app.get('/login', function(req, res) {
  const authUrl = `https://github.com/login/oauth/authorize?client_id=${CLIENT_ID}&scope=user:email`;
  res.redirect(authUrl);
});
  1. 强制已授权用户重新确认权限
    如果用户之前已经授权过你的应用但没有user:email权限,需要强制用户重新授权,在跳转URL中添加prompt=consent参数:
const authUrl = `https://github.com/login/oauth/authorize?client_id=${CLIENT_ID}&scope=user:email&prompt=consent`;
  1. 验证权限是否生效
    获取到access_token后,调用https://api.github.com/user接口,查看返回数据中的scope字段,确认是否包含user:email:
// 验证权限的示例
fetch('https://api.github.com/user', {
  headers: {
    'Authorization': `token ${accessToken}`
  }
}).then(res => res.json()).then(data => {
  console.log('当前令牌权限:', data.scope);
});

关于404报错的说明

调用/user/emails返回404是权限不足的误导性提示,当令牌没有user:email权限时,GitHub会返回这个错误,而非明确的权限缺失提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:30:47