Ответ от GitHub API не возвращает токен доступа с соответствующими областями для просмотра личных репозиториев - PullRequest
2 голосов
/ 18 марта 2019

Я получаю ответ, который хочу, но маркер доступа, возвращенный из GitHub, возвращается без областей в ответе:

// githubs response

{ 
  access_token: 'a2ed9606c8b06bf00a16dc34584b1509462450a4',
  token_type: 'bearer',
  scope: '' 
}

Токен не может просматривать личные репозитории, как мой личный токен доступа с включенными областями. Я делаю что-то не так или не связываюсь с правильной конечной точкой?

// backend - Auth.js

var express = require('express');
var router = express.Router();
var fetch = require('isomorphic-fetch');

let token = null;

const createFetchOptions = (method, body = undefined) => {
    const options = {
        method,
        headers: {
            'Content-type': null,
            'Accept': null,
        },
    };

    options.headers['Content-type'] = 'application/json';
    options.headers['Accept'] = 'application/json';
    options.body = JSON.stringify(body);

    return options;
};

const Fetcher = {
    get: async (url) => {
        const res =
            await fetch(
                url,
                createFetchOptions('GET'),
            );
        return res;
    },

    post: async (url, body) => {
        const res =
            await fetch(
                url,
                createFetchOptions('POST', body),
            );
        return res;
    },
}

router.post('/token', async (req, res) => {
    const { clientId, clientSecret, sessionCode } = req.body;

    const response = await Fetcher.post('https://github.com/login/oauth/access_token', {
        client_id: clientId,
        client_secret: clientSecret,
        code: sessionCode,
    });

    const result = await response.json();
    console.log(result)
    res.json(result);
});


module.exports = router;

1 Ответ

2 голосов
/ 31 марта 2019

В указанном коде отсутствует шаг, на котором вы запрашиваете у пользователя GitHub идентификатор , отправляя запрос GET https://github.com/login/oauth/authorize.Я предполагаю, что вы включаете этот вызов где-то в свой код, потому что необходимо получить значение sessionCode, которое вы передаете в теле вашего запроса POST https://github.com/login/oauth/access_token.

В любом случае этошаг, на котором вы указали бы различные области действия , которые запрашивает ваше приложение.Запрошенные области передаются через параметр запроса scope, разделенный пробелами, если вы запрашиваете несколько областей.Например, следующий запрос относится к областям user и public_repo:

GET https://github.com/login/oauth/authorize?
  client_id=...&
  scope=user%20public_repo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...