运行传递的函数和passport.authenticate

时间:2017-06-04 01:58:44

标签: node.js jwt backend passport.js

我想要设置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('/');
 });

1 个答案:

答案 0 :(得分:1)

来自express docs

  

如果当前的中间件功能没有结束请求 - 响应   循环时,必须调用 next()将控制权传递给下一个中间件   功能

由于您尝试运行两个中间件函数和一个“最终”请求处理器,因此您应该在设置JWT的函数中将return res.send();替换为next()

另请注意,如果出现任何错误,请致电next(err)。 (您不应该允许请求在中间件功能中未处理,因为客户端永远不会收到响应)。