2016-08-21 107 views
6

我目前正在使用JSONWebtoken构建一个使用NodeJS的API。当我尝试使用标题中的标记时,我收到错误403,它直接转到下面代码中的else语句,这意味着标记根本就不存在。与JQuery一起使用JWT,不断得到错误

这是我如何得到服务器端的令牌:

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-访问令牌作为标题上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); 
     } 
    }); 

但有些是怎么一回事呢,如果都和else语句,所以它响应下一条路线,但也显示403消息。

+0

你有服务器端代码?如果您使用其他方法运行验证,但验证成功但您的cookie不存在,您是否记得在验证令牌之前从cookie中移除“承载者”? – Mike

+0

@Mike我更新服务器代码问题是直接进入else语句,这意味着令牌根本不存在 – Hilmanrdn

+0

尝试在ajax头文件中使用对象:{'X-Auth-Token':token} OR ..头文件:{ 'Authorization':'Bearer'+ $ .cookie('token') },还尝试添加标题'Content-Type':'application/json', 'Accept':'application/json' – owaishanif786

回答

0

我改变我的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); 
      } 
     }); 
相关问题