rest - Hur kan jag uppdatera en OAuth2-token? Behöver jag vänta tills token går ut? (Patreon API)
Jag provar OAuth med Patreons API. Jag är väldigt ny till OAuth-processen och har använt Patreons Javascript-paket för att hjälpa till att hantera begäran åt mig.
- NPM: https://www.npmjs.com/package/patreon
- Patreon-dokumentation: https://docs.patreon.com/#introduction
Hittills har jag kunnat få token framgångsrikt via:
import * as patreon from 'patreon';
const patreonOAuthClient = patreon.oauth(clientId, clientSecret);
patreonOAuthClient.getTokens(oauthGrantCode, redirectURL).then((tokenResponse) => {
console.log(tokenResponse);
})
Token jag tar emot ser ut så här:
// 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"
}
På min lokala server försöker jag få refresh-token att fungera så att jag inte behöver be användare om tillstånd varje månad.
Även om när jag använder metoden med uppdateringstoken får jag ett 400 Bad Request:
patreonOAuthClient.refreshToken(tokenResponse).then(response => {
console.log(response, 'success!');
}).catch(err => {
console.log(err, ':(');
});
Det visas inte i npm-dokumentationen men du kan hitta refreshToken() i Patreons källkod på GitHub.
Enligt här i deras API-dokument:
Om du vill få uppdaterad information efter att token har gått ut kan en ny token utfärdas för att användas under följande månad. För att uppdatera en token, gör en POST-begäran till token-slutpunkten med en granttyp av refresh_token, som i exemplet. Du kan också manuellt uppdatera token på den lämpliga klienten på din klientsida.
Så är anledningen till att jag får 400 att jag behöver vänta en månad för att uppdatera token, eller implementerar jag bara API:et fel? Jag hoppas att någon med mer erfarenhet av OAuth kan berätta för mig om vi borde göra token-uppdateringar antingen före eller efter att token har gått ut.
(Om du uppdaterar det innan det går ut, finns det ett visst sätt att timinga en Express-server för att göra det innan månaden går ut? Eftersom jag tror att det att lägga till en timeout för varje token skulle vara riktigt dåligt för minnet).
Svar #1
Jag fick äntligen SDK:n att fungera.. Jag fick intrycket från källkoden att token var objektet som mottogs från svaret. Men det visar sig att token är strängvärdet.
Så :
// Using tokenResponse.refresh_token instead of just tokenResponse
patreonOAuthClient.refreshToken(tokenResponse.refresh_token).then(response => {
console.log(response, 'success!');
}).catch(err => {
console.log(err, ':(');
});
