Как я могу обновить токен OAuth2? Нужно ли ждать, пока токен не истечет? (Patreon API)

Я пробую OAuth, используя API Патреона. Я очень плохо знаком с процессом OAuth и использую Javascript Package от Patreon, чтобы помочь мне обработать запрос.

До сих пор я был в состоянии успешно получить токен через:

import * as patreon from 'patreon';
const patreonOAuthClient = patreon.oauth(clientId, clientSecret);
patreonOAuthClient.getTokens(oauthGrantCode, redirectURL).then((tokenResponse) => { 
     console.log(tokenResponse);
})

Знак, который я получаю, выглядит так:

   // Example Token from getTokens()'s then()-response
   tokenResponse = {
        access_token: "UbHYT3H51GpeYueBeBuvBj1fnEFzv5A5870s_rYeMHo",
        expires_in: 2678400,
        refresh_token: "AP5aAw-gJbVf35tWxQb74rmJJz2MhwIYq660m0jiZQ4",
        scope: "my-campaign pledges-to-me users",
        token_type: "Bearer",
        version: "0.0.1"
    }

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

Хотя, когда я использую метод обновления токена, я получаю 400 Bad Request:

patreonOAuthClient.refreshToken(tokenResponse).then(response => {
      console.log(response, 'success!');
}).catch(err => {
      console.log(err, ':(');
});

Это не показано в документации по npm, но вы можете найти refreshToken() в исходном коде github patreon.

Согласно здесь в их документах API:

Если вы хотите получать актуальную информацию после истечения срока действия токена, может быть выпущен новый токен, который будет использоваться в следующем месяце. Чтобы обновить токен, сделайте POST-запрос к конечной точке токена с типом предоставления refresh_token, как в примере. Вы также можете вручную обновить токен на соответствующем клиенте на своей странице клиентов.

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

(Если вы обновите его до истечения срока его действия, существует ли определенный способ рассчитать время для экспресс-сервера до истечения месяца? Как я думаю, добавление тайм-аута для каждого токена будет очень плохо для памяти).

1 ответ

Решение

Я, наконец, получил SDK работающим. Из исходного кода у меня сложилось впечатление, что токен - это объект, полученный из ответа. Но оказывается, что токен является строковым значением.

Так:

// Using tokenResponse.refresh_token instead of just tokenResponse
patreonOAuthClient.refreshToken(tokenResponse.refresh_token).then(response => {
      console.log(response, 'success!');
}).catch(err => {
      console.log(err, ':(');
});
Другие вопросы по тегам