中间件成功通过passport.authenticate('local', {session: false})
后,我无法将用户对象获取到下一个中间件。Koa v2,在护照 - loca登录后获取用户对象
下面是我的代码的样子。
在护照本地策略
passport.use(new localStrategy((username, password, done) => {
User.findOne({username}, (err, user) => {
if(err) { return done(err) }
if(!user) { return done(err) }
user.comparePasswords(password, async(err, isMatch) => {
if(!isMatch) { return done(null, false) }
done(null, user);
});
});
}));
这我认为是假设回报用户对象,如果登录成功建立。
然后在我的路线我
const requireAuth = passport.authenticate('local', {session: false});
router.post('/login', requireAuth, signIn);
,当我打/signin
护照中间件被调用,然后当它这样做signIn
中间件被称为东西,我很期待,与我登录的用户对象。
但是,当我在签到检查中间件不会传送(在请求或响应)对象。
这里是我的签到中间件
const signIn = async (ctx, next) => {
const res = ctx.response;
const req = ctx.request;
console.log('response', res); //- Nothing from passport
console.log('request', req); //- Nothing from passport
await next();
};
我需要从护照通过登录的用户到下一个中间件,所以我可以使用用户ID来进行JWT。
谢谢。
我不认为'const res = await ctx.response;'&'const req = await ctx.request;'是正确的,因为这需要上下文中的请求和响应对象承诺尚未执行,但我不认为是这样,是吗? –
@OvidiuDolha不,它不是,我以正常的方式尝试(没有“等待”),但那也没有效果。 Lemme修复代码。 – ArchNoob