我目前正在使用JSONWebtoken与NodeJS构建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中:
令牌作为数据起作用:
$.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);
}
});
令牌作为参数也适用
$.get("http://localhost:3000/api/users?token=" + $.cookie('token'))
.done(function(data){
console.log(data);
});
这是问题,使用标题
$.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);
}
});
我还尝试在ajaxSetup上添加x-access-token作为头文件
$.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语句一起使用,所以它会响应下一个路由,但也会显示403消息。
答案 0 :(得分: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);
}
});