Как я могу использовать только приложение OAuth reddit api access_token? - PullRequest
0 голосов
/ 04 февраля 2020

Я создаю веб-приложение, которое отображает оценки представлений reddit, и я использую OAuth только для приложений для авторизации reddit oauth api. Я могу вернуть access_token и получаю ответ, который хочу получить при вызове API Reddit.

Однако, поскольку я новичок в OAuth, я предполагаю, что я должен каким-то образом использовать свойство "expires_in" из ответа на авторизацию и повторно использовать access_token, если пользователь вызывает мою конечную точку в течение следующего часа. Я использую облачные функции Firebase и node.js время выполнения, вот моя облачная функция:

export const reddit_articles_scores = functions.https.onRequest(async (request, response) => {

  try {
  // if (!isAccessToken)
    const params = new URLSearchParams();

    params.append('grant_type', REDDIT_APP_ONLY_GRANT_TYPE)
    params.append('device_id', 'DO_NOT_TRACK_THIS_DEVICE')

    const token_res = await fetch(REDDIT_ACCESS_TOKEN_URL, {
      method: 'POST',
      body: params,
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Authorization': `Basic ${Buffer.from(`${REDDIT_CLIENT_ID}:${REDDIT_CLIENT_SECRET}`).toString('base64')}`
      }
    }).then(data => data.json())

    if (!token_res.error) {
      // do I send back the access token ?

      const articles_scores: any = []
      const reddit_res = await fetch(`https://oauth.reddit.com/user/${REDDIT_USERNAME}/submitted`, {
        headers: {
          Authorization: `${token_res.token_type} ${token_res.access_token}`
        }
      }).then((data: any) => data.json())

      reddit_res.data.children.forEach((submission: any) => {
        articles_scores.push({ score: submission.data.score, id: submission.data.id })
      });

      response.send(articles_scores)
    }

    response.status(token_res.error).send(token_res.message)

  // else -> token exists and not expired -> fetch data

  } catch (error) {
    response.status(500).send('Unexpected Error !')
  }
})

Как я могу использовать access_token, когда у меня есть эта «Авторизованная» настройка авторизации?

...