处理passport.authenticate()函数的拒绝

时间:2017-09-16 02:44:16

标签: node.js passport.js

我有这样的路由器:

/* get user info */
router.get('/info', authenticate(), function (req, res) {

  models.User.getUserById(req.user.id, function (result) {
    if (result) {
      var user = result.dataValues;
      res.json({
        success: true,
        data: user,
        message: 'Get user info success!'
      })
    } else {
      res.json({
        success: false,
        message: 'User does not exist!'
      })
    }
  })
});

authenticate()函数是这样的:

/* ensure authentication */
var authenticate = function () {
  return passport.authenticate('jwt', {
    session: false
  });
}

如果用户登录,路由器将进入功能(req,res)。但是如果用户还没有登录呢?如果用户尚未登录,如何向客户返回消息?我可以回复passport.authenticate()吗?如果可以的话,这个回调的参数是什么?

1 个答案:

答案 0 :(得分:0)

根据Docs,您可以添加失败重定向网址和失败的Flash消息,如下所示:

var authenticate = function () {
  return passport.authenticate('jwt', {
    session: false,
    failureRedirect: '/login',
    failureFlash: 'Invalid username or password.'
  });
}

或者如果您想要自定义回调:

var authenticate = function (req, res, next) {
  return passport.authenticate('jwt', function (err, user, info) {
    if (err) { return next(err); }
    if (!user) {
      // code if failed here
      return res.redirect('/login')
    }
    req.logIn(user, function (err) {
      if (err) { return next(err); }
      return res.redirect('/users/' + user.username)
    })
  })
}