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

泰勒·奥斯丁

我将本地护照用于我的策略,并使用蓝鸟(Bluebird)来实现这一目标。我不确定这是否是一件坏事,但这是我想做的。我当前的问题是我不知道如何从路线中获取resolveand或rejectvalue。

我将发布本地策略。一切正常,我正在获取正确的信息。我只需要将此信息发送到路线即可使用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);
});
零298

您需要注意的主要事情是Strategy的API不处理Promise您必须处理它想要的回调参数。您可以在此处查看功能签名:配置策略在我的实现,我User与交易PromiseS和正义呼声,从内回调then()Promise

由于您必须将Strategy要使用的护照交给护照,并且护照希望使用回调约定,因此您必须遵循其API。截至目前,password尚未在其API中真正支持Promises。我想说一下护照问题,添加支持诺言流,并添加与诺言集成的支持。我认为这不会在Express迁移之前发生。

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

const express = require("express"),
    passport = require("passport"),
    Strategy = require("passport-local").Strategy,
    User = require("../models/user"),
    router = express.Router();

// Strategy to authenticate a user
const localStrategy = new Strategy((username, password, cb) => {
    User.authenticate(username, password).then((result) => {
        if (result.success) {
            cb(null, result.user);
        } else {
            cb(null, false);
        }
    }, cb);
});

function ensureLoggedIn(req, res, next) {
    if (req.isAuthenticated()) {
        return next();
    }
    res.redirect("/login");
}

// Utilize the strategy
passport.use(localStrategy);

router.use(require("./passify"));
router.use("/profile", ensureLoggedIn, require("./profile"));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章