【发布时间】:2020-06-27 19:06:46
【问题描述】:
所以我正在尝试将访问令牌保存到 Koa 中的状态,以供以后使用,并且不必在客户端周围传递它。
在 Koa 的 passport oauth2 documentation 之后,我正在努力坚持 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;
};
应该设置和读取 accesstoken 的路由声明:
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
});
问题:
为什么在获取
/get-token-from-state时ctx.state.accessToken未定义?我是否应该尝试像这样保留访问令牌?有没有其他途径获取accessToke的方法?
【问题讨论】:
标签: node.js oauth-2.0 passport.js koa