首页 文章

Koa 2护照异步

提问于
浏览
1

试图在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;
  }
});

所以我的代码命中('用户找到了 - 完成')......但是我从来没有在路线上达到“我从来没有做到这一点” . 尝试过切换几件事情,所以我确定这可能是一件非常愚蠢的事情,我做得不对 .

2 回答

  • 1

    你最近可能已经检查过了,但无论如何,我相信这值得一看:NPM: koa-passport

    此外,手动返回Promise非常简单(使用 new Promisereturn async () => ..; 包装函数)

  • 0

    所以我的问题是passport.authentincate()返回一个好的回调,我试图用它作为一个承诺 .

    我在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() .

相关问题