如何在到达内置路由代码之前拦截查询字符串值

时间:2017-02-28 22:12:10

标签: jquery node.js passport.js

我在应用程序的前端和后端的node.js上使用jquery,bootstrap和html。另外,我正在使用jwt令牌的护照身份验证。这是问题,以登录过程为例;在用户输入他们的登录凭据后,我想使用location.href将用户重定向到仪表板页面,在那里他们可以访问他们的个人信息。问题是我无法在请求中使用承载令牌发送标头信息。我发现文档似乎表明我可以使用access_token参数名称在查询字符串中传递令牌。但是,由于我使用的是路由和友好网址,这会带来一个问题,因为这不是路由引擎所期望的url模式。更不用说它对顶部导航的影响,因为这将迫使我必须将令牌附加到所有导航href的。虽然,这似乎是一个黑客攻击,但是,有什么方法可以在它到达路由之前拦截access_token,执行身份验证检查并从请求中删除access_token或者是否有更好的方法来处理这种情况?

我现在还有另一个问题,我的静态文件现在需要指定令牌;如何排除公用文件夹需要身份验证?

route.js:
module.exports = function(app, model){
    app.use("/api/customer", require("./routes/customer")(model));
}

customer controller:
module.exports = function(model){   
    router.get('/:id', function(req, res, next) { 
        …….
    });

    router.post('/', function(req, res, next) {
       …….
    });

    router.put('/id', function(req, res, next) {
        …….
    });

    router.delete('/id', function(req, res, next) {
        …….
    });

    return router;
};



app.js:
app.use(expressJwt({secret: process.env.AUTH_KEY,
  //credentialsRequired: false,
  getToken: function fromHeaderOrQuerystring (req) {
    if (req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Bearer') {
        return req.headers.authorization.split(' ')[1];
    } else if (req.query && req.query.token) {
      return req.query.token;
    }
    return null;
  }}).unless({path: [{ url: '/forgotpassword/', methods: ['GET'] }, 
  { url: '/api/login', methods: ['POST'] },
  { url: '/login', methods: ['GET'] },
  { url: '/index', methods: ['GET'] },
  { url: '/resetpassword', methods: ['GET'] },
  { url: '/api/resetpassword', methods: ['PUT'] }]} ));

0 个答案:

没有答案