Discord API - случайная ошибка «неверный код» при передаче сгенерированного кода OAuth2 - PullRequest
0 голосов
/ 27 марта 2020

Я успешно реализовал поток OAuth2 от Discord, используя тип предоставления кода авторизации в моем приложении. Конечный пользователь переходит по ссылке Discord OAuth2 для моего бота, авторизует его доступ, и Discord перенаправляет их обратно на мой сайт с помощью code строки запроса. Затем бот обменивает этот код на токен доступа, запрашивая API Discord. Документация по этому процессу доступна здесь для справки.

Однако, примерно каждые 50-100 запросов к конечной точке обмена, я получаю 403 с ошибкой invalid_grant и description Invalid "code" in request. Честно говоря, я не понимаю, как код, только что предоставленный системой Discord, мгновенно становится недействительным. Тот же пользователь может завершить процесс снова, и ошибка не возвращается во второй раз.

В отчаянии я попытался включить опцию в панели инструментов для разработчиков с именем Requires OAuth2 Code Grant, увидев, что она говорит "если вашему приложению требуется несколько областей ", но это не произвело никакого эффекта. Я также пробовал бесконечную отладку, но обстоятельства в каждом случае кажутся случайными. Как ни странно, я не могу найти никого с такой же проблемой в Интернете.

Ниже приведен запрос, который я делаю в Node.js, используя библиотеку superagent . Он соответствует документации и работает отлично, за исключением случайного ответа, описанного как ошибка.

superagent.post('https://discordapp.com/api/v6/oauth2/token')
  .type('x-www-form-urlencoded')
  .set('Content-Type', 'application/x-www-form-urlencoded')
  .send({
    client_id: process.env.BOT_ID,
    client_secret: process.env.BOT_SECRET,
    grant_type: 'authorization_code',
    code,
    redirect_uri: process.env.OAUTH2_REDIRECT_URI,
    scope: 'identify guilds.join',
  });

Я могу подтвердить, что все переменные соответствуют ожидаемым значениям. Значение redirect_uri соответствует значению redirect_uri в исходном URL. code - это значение строки запроса code, возвращаемой потоком OAuth2.

Что (если что-то) я делаю неправильно, что вызывает ошибку?


Обновление 1:

Discord направил меня к репозиторию API GitHub, и я обнаружил, что проблема закрыта здесь . Прокомментировано и будет обновляться здесь, если я получу какую-либо полезную информацию или полностью решу проблему (надеюсь, дело).

1 Ответ

0 голосов
/ 27 марта 2020

Вы использовали ссылку OAuth2, чтобы пригласить своего бота на свой сервер - с правильными разрешениями? Если да, то в своем основном файле. js вы определили токен? То есть bot.login («YOUR_TOKEN_HERE»). Я бы порекомендовал не переключать «Требуется предоставление кода OAuth2», так как вначале это сложно сделать. Пожалуйста, дайте мне знать о любом прогрессе:)

...