【问题标题】:Is it possible to use validation with express static routes?是否可以对快速静态路由使用验证?
【发布时间】:2015-05-02 17:54:34
【问题描述】:

我在我的项目中使用 jwt 令牌验证来保护一些重要数据:

if (req.headers.auth) {
    var token = req.headers.auth.split(' ')[5];
    var payload = jwt.decode(token, 'blablabla...');

    if (!payload.sub) {
        res.status(401).send({
            message: 'Authentication failed'
        });
    }
    if (!req.headers.auth) {
        return res.status(301).send({
            message:'You are not authorized'
        });
    }
    res.send(data);
} else {
    res.header(404).send('Go away!');
}

是否可以使用这种方法来保护静态路由,使用快速静态中间件添加?

更新!!! 好的,现在我的静态路由上设置了 jwt 令牌验证。但是我遇到了另一个问题 - 如何在我的 Angular 应用程序上传之前将这个令牌发送到 node.js 服务器(因为现在它被新的中间件阻止了)并开始将令牌插入到 http 标头中。我是否需要一些额外的模块,或者我的新中间件可以以某种方式从浏览器请求该 jwt 令牌?

【问题讨论】:

  • 在单独的问题中询问您的更新。

标签: node.js validation express static


【解决方案1】:

是的,您可以附加一个额外的中间件来执行您的快速静态资源,如下所示:

var staticMiddleware = function(req, res, next) {
    console.log('Hello from staticMiddleware!');
    next();
};
app.use(staticMiddleware, express.static(__dirname + '/public'));

请注意,如果您确实添加了此 JWT 令牌检查中间件,那么您应该只在身份验证失败时返回此代码中的响应(例如 res.send())。如果 JWT 有效,要让代码继续到静态路由,请调用 next()

关于您的代码,我还有两个注意事项:

  1. 您的if(!req.headers.auth) 块将永远不会被执行,您已经在if(req.headers.auth) 块中。
  2. 在此处的所有失败情况下(缺少req.headers.auth,或缺少payload.sub),您应该返回401 Unauthorized。 301 和 404 都不正确。

【讨论】:

  • 桑克斯!我明天会试一试,并告诉你它是如何工作的。
  • 更新!!!好的,现在我的静态路由上设置了 jwt 令牌验证。但是我遇到了另一个问题 - 如何在我的 Angular 应用程序上传之前将这个令牌发送到 node.js 服务器(因为现在它被新的中间变量阻止了)并开始将令牌插入到 http 标头中。我是否需要一些额外的模块,或者我的新中间件可能会以某种方式从浏览器请求该 jwt 令牌?
猜你喜欢
  • 2017-04-04
  • 2020-07-07
  • 2019-08-18
  • 2017-08-16
  • 2017-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
相关资源
最近更新 更多