Итак, я пытаюсь сохранить токен доступа к состоянию в Koa, просто для последующего использования и избавления от необходимости передавать его клиенту.
Следуя документации по паспорту oauth2 для Koa, я изо всех сил пытаюсь сохранить что-либо для ctx.state
...
Настройка Koa / паспорта oauth2:
server.koaApp.use(koaSession(
{
key: sessionKey,
rolling: true,
maxAge: sessionMaxAge,
sameSite: 'none',
secure: true,
// @ts-ignore
domain: undefined
},
server.koaApp,
));
// set up passport sessions here
function createPassport() {
const passport = new KoaPassport();
passport.use(new OAuth2Strategy({
authorizationURL: oauthClientAuthUrl,
tokenURL: oauthClientTokenUrl,
clientID: oauthClientId,
clientSecret: oauthClientSecret,
callbackURL: oauthClientRedirectUrl,
}, function(accessToken, refreshToken, params, profile, cb) {
cb(null, {id: 'somedudesID', accessToken});
}));
passport.serializeUser((user, done) => {
done(null, user);
});
passport.deserializeUser((user, done) => {
done(null, user);
});
return passport;
};
Объявления маршрута, которые должны устанавливать и читать токен доступа:
router.get('/authorize', passport.authenticate('oauth2'), (ctx: any) => {
const { accessToken } = ctx.session.passport.user;
ctx.state.accessToken = accessToken;
ctx.status = 200;
});
router.get('/get-token-from-state', (ctx: any) => {
console.log(ctx.state.accessToken); // undefined
});
Вопросы:
Почему
ctx.state.accessToken
не определено при переходе к/get-token-from-state
?Должен ли я даже пытаться сохранить токен доступа таким образом? Есть ли другой способ получить accessToke на других маршрутах?
ctx.state
илиctx.session
. Логи: ctx.state = { _passport: { instance: KoaPassport { _key: 'passport', _strategies: [Object], _serializers: [Array], _deserializers: [Array], _infoTransformers: [], _framework: [Object], _userProperty : 'user', _sm: [SessionManager] } } } ctx.session = { cookie: { httpOnly: true, path: '/', overwrite: true, signed: true, maxAge: 86400000 } } 18.03.2020