Я создаю веб-приложение, которое отображает оценки представлений 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
, когда у меня есть эта «Авторизованная» настройка авторизации?