我想要设置JWT和passport.authenticate
的函数,但只运行前者。
有没有办法可以同时运行?
router.post('/login', (req, res, next) => {
const userEmail = req.body.username;
User.getUserByEmail(userEmail, function(err, user) {
const token = jwt.sign(user, config.secret, {
expiresIn: 604800 // 1 week
});
new Cookies(req, res).set('access_tokenx', token, {
httpOnly: true,
secure: false
});
return res.send();
});
},
passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/users/login',
failureFlash: true
}),
function(req, res) {
res.redirect('/');
});
答案 0 :(得分:1)
来自express
docs:
如果当前的中间件功能没有结束请求 - 响应 循环时,必须调用 next()将控制权传递给下一个中间件 功能
由于您尝试运行两个中间件函数和一个“最终”请求处理器,因此您应该在设置JWT的函数中将return res.send();
替换为next()
。
另请注意,如果出现任何错误,请致电next(err)
。 (您不应该允许请求在中间件功能中未处理,因为客户端永远不会收到响应)。