Koa 2 + 护照 + 异步
Koa 2 + Passport + async
试图在 Koa 2 中实施本地 Passport 策略,但我遗漏了一些重要的东西...
当我的路由到达 passport.authenticate() 时,我能够检索到我的用户,但我永远不会从 await() 返回,所以我的代码没有任何进一步的进展。
授权:
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;
}
});
所以我的代码命中 ('USER FOUND - DONE')...但我从未在路线中到达 'I NEVER MAKE IT TO THIS POINT'。已尝试切换几项内容,所以我确定这可能真的很愚蠢,我做得不对。
所以我的问题是 passport.authentincate() returns 一个很好的回调,我试图将它用作承诺。
我将本地策略包装在一个 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()。
你最近可能看过这个,但无论如何,我相信这值得一看:NPM: koa-passport
此外,手动返回 Promise 非常简单(使用 new Promise
或 return async () => ..;
包装函数)
试图在 Koa 2 中实施本地 Passport 策略,但我遗漏了一些重要的东西...
当我的路由到达 passport.authenticate() 时,我能够检索到我的用户,但我永远不会从 await() 返回,所以我的代码没有任何进一步的进展。
授权:
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;
}
});
所以我的代码命中 ('USER FOUND - DONE')...但我从未在路线中到达 'I NEVER MAKE IT TO THIS POINT'。已尝试切换几项内容,所以我确定这可能真的很愚蠢,我做得不对。
所以我的问题是 passport.authentincate() returns 一个很好的回调,我试图将它用作承诺。
我将本地策略包装在一个 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()。
你最近可能看过这个,但无论如何,我相信这值得一看:NPM: koa-passport
此外,手动返回 Promise 非常简单(使用 new Promise
或 return async () => ..;
包装函数)