【问题标题】:How to redirect to unauthenticated user using express-jwt如何使用 express-jwt 重定向到未经身份验证的用户
【发布时间】:2016-11-15 03:34:49
【问题描述】:

这是我的第一个快递应用。我正在尝试对某些路由实施身份验证。理想情况下,如果用户未通过身份验证,他们将被重定向到主页。所以我写了这个中间件:

var jwt = require('express-jwt');

app.get('/protected',
  jwt({secret: 'shhhhhhared-secret'}),      //express-jwt middleware
  function(req, res, next) {                //redirection middleware
    if(!req.user._id){
      console.log('authentication failed')
      res.redirect('/home')
    }else{
      next()
    };
  });

如果用户已登录,则代码有效。但是,如果用户没有登录,浏览器只会显示 401 未经授权的错误。没有重定向。该过程在 express-jwt 中间件处失败,并且没有继续到我的重定向中间件。

我需要在 jwt 函数中设置一些配置吗?或者如果遇到401,有没有办法设置全局重定向。

【问题讨论】:

    标签: node.js express express-jwt


    【解决方案1】:

    如果用户未通过身份验证,则会引发错误并且 node.js 停止代码执行。之后,您将能够在快速错误处理程序中捕获它:

      app.use(function(err, req, res, next) {
        if(401 == err.status) {
            res.redirect('/home')
        }
      });
    

    【讨论】:

    • 这段代码应该放在认证中间件之前还是之后?
    • 这个中间件应该是最后一个。不要忘记在 if else 中处理其他错误。您可以发送带有错误描述的短信或电子邮件,或者将它们保存在数据库中。
    猜你喜欢
    • 2020-02-22
    • 1970-01-01
    • 2017-08-27
    • 2016-08-08
    • 2021-09-29
    • 1970-01-01
    • 2019-04-25
    • 2016-01-17
    • 2019-01-04
    相关资源
    最近更新 更多