Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何在querystring值到达内置路由代码之前拦截它_Jquery_Node.js_Passport.js - Fatal编程技术网

Jquery 如何在querystring值到达内置路由代码之前拦截它

Jquery 如何在querystring值到达内置路由代码之前拦截它,jquery,node.js,passport.js,Jquery,Node.js,Passport.js,我在应用程序的前端使用jquery、bootstrap和html,在后端使用node.js。此外,我正在使用jwt令牌的passport身份验证。这就是问题所在,以登录过程为例;用户输入登录凭据后,我想使用location.href将用户重定向到仪表板页面,在那里他们可以访问自己的个人信息。问题是我没有办法在请求中使用承载令牌发送头信息。我找到的文档似乎表明我可以使用access\u token参数名称在querystring中传递令牌。然而,由于我使用的是路由和友好的url,这就带来了一个问题

我在应用程序的前端使用jquery、bootstrap和html,在后端使用node.js。此外,我正在使用jwt令牌的passport身份验证。这就是问题所在,以登录过程为例;用户输入登录凭据后,我想使用location.href将用户重定向到仪表板页面,在那里他们可以访问自己的个人信息。问题是我没有办法在请求中使用承载令牌发送头信息。我找到的文档似乎表明我可以使用access\u token参数名称在querystring中传递令牌。然而,由于我使用的是路由和友好的url,这就带来了一个问题,因为这不是路由引擎所期望的url模式。更不用说这对顶部导航的影响了,因为这将迫使我不得不将令牌附加到所有导航href。虽然,这似乎是一种黑客行为,但是,我可以用什么方法在访问令牌到达路由之前拦截它,执行身份验证检查并从请求中删除访问令牌,或者有更好的方法来处理这种情况

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

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'] }]} ));

您可以让服务器将JWT令牌放入一个cookie中,从那时起,该cookie将自动伴随所有浏览器请求。您可以在中间件中拦截在任何路由之前注册的查询字符串。对于cookie场景,该过程如何工作?在调用javascript中的location.href之前,我在javascript中设置了cookie?我是否需要在服务器端进行任何更改以适应cookie方法?我是否需要给cookie指定一个特定的名称,以便中间件找到它?如果令牌是在您的服务器上生成的,您可以将令牌放在生成请求的cookie中。如果必须将其放入客户端的cookie中,也可以这样做。您可以为它指定一个已知的cookie名称(由您选择),以便稍后将其从cookie中取回。问题是,如果我使用location.href或单击链接将用户发送到另一个页面。我需要一种方法将jwt令牌发送到服务器以对用户进行身份验证。如果我使用access\u token参数将令牌附加到querystring,它将抛出当前路由。从更大的角度来看,我正试图找到解决这个问题的方法。