我将本地护照用于我的策略,并使用蓝鸟(Bluebird)来实现这一目标。我不确定这是否是一件坏事,但这是我想做的。我当前的问题是我不知道如何从路线中获取resolve
and或reject
value。
我将发布本地策略。一切正常,我正在获取正确的信息。我只需要将此信息发送到路线即可使用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);
});
您需要注意的主要事情是Strategy
的API不处理Promise
。您必须处理它想要的回调参数。您可以在此处查看功能签名:配置策略。在我的实现,我User
与交易Promise
S和正义呼声,从内回调then()
的Promise
。
由于您必须将Strategy
要使用的护照交给护照,并且护照希望使用回调约定,因此您必须遵循其API。截至目前,password尚未在其API中真正支持Promises。我想说一下护照问题,添加支持诺言流,并添加与诺言集成的支持。我认为这不会在Express迁移之前发生。
这是我使用Strategy
s处理异步登录的方式:
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] 删除。
我来说两句