与JQuery一起使用JWT,不断得到一个错误

我目前正在使用JSONWebtoken与NodeJSbuild立一个API。 当我尝试使用标头中的标记时,我收到错误403,它直接转到下面代码中的else语句,这意味着标记根本就不存在。

以下是我在服务器端获取令牌的方法:

router.use(function(req, res, next){ var token = req.body.token || req.query.token || req.headers['x-access-token']; //decode token if(token) { jwt.verify(token, app.get('secretKey'), function(err, decoded){ if(err) return res.json({ success:false, message: 'failed, token problem'}); else { req.decoded = decoded; next(); } }); }else { return res.status(403).send({ success:false, message: 'token not provided' }) } }); 

在客户端,我使用JQuery并将其保存在cookie中:

  1. 令牌作为数据的作品:

     $.ajax({ type:'GET', dataType: 'jsonp', url :"http://localhost:3000/api/users", data : { token : $.cookie('token') }, success: function(data, status) { console.log("Status " + status); console.log(data); } }); 
  2. 令牌作为参数也起作用

     $.get("http://localhost:3000/api/users?token=" + $.cookie('token')) .done(function(data){ console.log(data); }); 
  3. 这是使用标题的问题

     $.ajax({ type:'GET', url :"http://localhost:3000/api/users", beforeSend: function(xhr) { xhr.setRequestHeader("Authorization", "Bearer " + $.cookie('token')); }, success: function(data, status) { console.log("Status " + status); console.log(data); } }); 

我也尝试添加x-access-token作为ajaxSetup头

 $.ajaxSetup({ headers: { 'x-access-token': $.cookie('token') } }); 

我一直得到403,这是没有提供的令牌,我认为这是一个CORS的问题,所以我试图使用CORS NPM包https://github.com/expressjs/cors不起作用,我试图实现这一点。

 app.use(function(req, res, next){ res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE'); res.header('Access-Control-Allow-Headers', 'Content-Type'); next(); }); 

// 2016年8月22日更新信息

如果我在Safari中使用以下内容,它将起作用:

  $.ajax({ type:'GET', url :"http://localhost:3000/api/users", headers : { "Authorization" : $.cookie('token') }, success: function(data, status) { console.log("Status " + status); console.log(data); } }); 

但有些如何去if和else语句,所以它响应下一个路线,但也显示403消息。

       

网上收集的解决方案 "与JQuery一起使用JWT,不断得到一个错误"

我通过使用节点包更改我的Cors设置

 https://github.com/expressjs/cors 

到目前为止,它使用它的工作

 $.ajax({ type:'GET', url :"http://localhost:3000/api/users", headers: {'x-access-token': $.cookie('token')}, success: function(data, status) { console.log("Status " + status); console.log(data); } });