尝试在Koa 2中实施本地Passport策略,但我遗漏了一些至关重要的内容......
当我的路线遇到passport.authenticate()时,我能够检索我的用户,但我永远不会从那个await()返回,所以我的代码不再进展。
AUTH:
passport.use( new LocalStrategy(async(username, password, done) => {
console.log('AUTHENTICATING!');
try {
let user = await User.findOne({username:username});
if(user) {
console.log('USER FOUND - DONE');
done(null, user);
} else {
console.log('USER NOT FOUND - DONE');
done(null, false);
}
} catch (err) {
throw err;
}
}));
路由
router.post('/login', bodyParser(), async(ctx, next) => {
try {
await passport.authenticate('local')(ctx,next);
console.log('I NEVER MAKE IT TO THIS POINT');
} catch (err) {
throw err;
}
});
所以我的代码命中('用户找到了 - 完成')......但是我从来没有在路线上达到“我从来没有做到这一点”。尝试过切换几件事情,所以我确信这可能是一件非常愚蠢的事情,我做得不对。
答案 0 :(得分:2)
你最近可能已经检查过了,但无论如何,我相信这值得一看:NPM: koa-passport
此外,手动返回Promise非常简单(使用new Promise
或return async () => ..;
包装函数)
答案 1 :(得分:0)
所以我的问题是passport.authentincate()返回了一个好的&ol;回调,我试图用它作为承诺。
我将本地策略包含在co()函数中并且它正在工作:
passport.use( new LocalStrategy('local', function(username, password, done) {
return co(function*(){
try {
let user = yield Promise.resolve(User.findOne({username:username}));
if(user) {
console.log('USER FOUND - DONE');
return done(null, user);
} else {
console.log('USER NOT FOUND - DONE');
return done(null, false);
}
} catch (err) {
throw err;
}
});
}));
我很想知道是否还有其他方法可以完全以异步/等待方式完成此操作 - 我希望不必为此使用co()。