如何从基于承诺的护照本地策略中获取价值?

时间:2017-09-28 19:46:01

标签: node.js express promise bluebird passport.js

我使用本地护照作为我的策略,并使用蓝鸟来实现这一承诺。我不确定这是不是坏事,但这是我想做的。我目前的问题是我不知道如何从我的路线中获取resolve和/或reject值。

我将发布本地策略。一切正常,我得到了正确的信息。我只需要将此信息提供给路线并且能够使用req.user

我收到authUser并获得任何errors,例如自定义错误密码错误。但如果看到其他代码有帮助,请告诉我。

passport.use(
  new LocalStrat((username, password) => {
    return new Promise((resolve, reject) => {
      controllers.user
        .getUserByUsername(username)
        .then(user => {
          user = user;
          return controllers.user.comparePassword(password, user);
        })
        .then(authUser => {
          resolve(authUser);
        })
        .catch(err => {
          reject(err);
        });
    });
  })
);
/* User Login */
router.post('/login', passport.authenticate('local'), (req, res) => {
  // Need to access promise values here 
  console.log(req.user);
});

1 个答案:

答案 0 :(得分:4)

您需要注意的主要事项是Strategy的API不会处理Promise。你将不得不处理它想要的回调参数。您可以在此处查看函数签名:Configure Strategy。在我的实施中,我的UserPromise进行了交易,只是在then()的{​​{1}}内调用了回调。

由于您必须将要使用的Promise提交给护照,并且护照要求使用回调约定,因此您必须遵循其API。截至目前,护照并不真正支持其API内的Promise。我要说看一下护照问题Add support promises flow并添加对与promises集成的支持。我不认为它会在快速移民之前发生。不过。

这是我使用Strategy来处理异步登录的方式:

Strategy