我正在使用节点提取从OAuth2 GitHub应用检索OAuth2令牌。返回的令牌有效,我可以从“www.example.com“检索用户信息https://api.github.com/user。我还需要电子邮件,这需要调用https://api.github.com/user/emails [0]
这需要一个user:email
的作用域,我将其设置为一个参数:
app.get('/getAccessToken', async function (req, res) {
const params = "?client_id=" + CLIENT_ID + "&client_secret=" + CLIENT_SECRET + "&code=" + req.query.code + "&scope=user:email";
await fetch("https://github.com/login/oauth/access_token" + params, {
method: "POST",
headers: {
"Accept": "application/json"
}
}).then((response) => {
return response.json();
}).then(data => {
res.json(data);
});
});
问题是范围没有设定:
我试着在标题中设置,但仍然没有喜悦:
headers: {
"Accept": "application/json",
"X-OAuth-Scopes": "user:email"
}
其结果是API返回404,表示授权许可:
{
message: 'Not Found',
documentation_url: 'https://docs.github.com/rest/reference/users#list-email-addresses-for-the-authenticated-user'
}
我不明白这怎么可能,因为我可以访问其他私人资源,如私人回购协议。
我认为这可能是权限问题,因此查看了OAuth2App部分,我在那里配置了我的应用程序,但是没有地方声明所需的范围
[0] https://docs.github.com/en/rest/users/emails?apiVersion=2022-11-28#list-email-addresses-for-the-authenticated-user
1条答案
按热度按时间hjzp0vay1#
在documentation之后,使用Github SDK,您可以找到get request to
/user
的示例,响应中的对象包含电子邮件以及其他信息。希望这能有所帮助!