javascript 无法在GitHub API上检索user:email的作用域

eoxn13cs  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(73)

我正在使用节点提取从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

hjzp0vay

hjzp0vay1#

documentation之后,使用Github SDK,您可以找到get request to /user的示例,响应中的对象包含电子邮件以及其他信息。

const octokit = new Octokit({
  auth: 'YOUR-TOKEN'
})

await octokit.request('GET /user', {})

希望这能有所帮助!

相关问题