【问题标题】:Handle rejection of passport.authenticate() function处理拒绝 passport.authenticate() 函数
【发布时间】:2017-09-16 02:44:16
【问题描述】:

我有一个这样的路由器:

/* 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() 吗?如果可以,这个回调的参数是什么?

【问题讨论】:

    标签: node.js passport.js


    【解决方案1】:

    根据Docs,您可以像这样添加失败重定向 URL 和失败闪烁消息:

    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)
        })
      })
    }
    

    【讨论】:

    • 自定义回调,用法为router.get('/info', authenticate(), function (req, res) {router.get('/info', authenticate(req, res, next), function (req, res) {??
    • 第一个。在定义中添加参数。
    猜你喜欢
    • 2020-09-17
    • 1970-01-01
    • 2018-12-09
    • 2021-10-14
    • 2020-11-16
    • 2020-05-06
    • 2019-10-27
    • 2020-09-26
    • 2021-04-16
    相关资源
    最近更新 更多