Tôi hiện đang xây dựng một API với NodeJS sử dụng JSONWebtoken. Khi tôi cố gắng tiêu thụ với các mã thông báo trong tiêu đề tôi nhận được lỗi 403 và nó đi trực tiếp đến các tuyên bố khác trong mã dưới đây, có nghĩa là mã thông báo là không có ở tất cả.Tiêu thụ JWT với JQuery, liên tục gặp lỗi
Dưới đây là làm thế nào tôi nhận mã thông báo trên server-side:
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'
})
}
});
trên client-side, Tôi đang sử dụng JQuery và lưu nó trong cookie:
thẻ như dữ liệu hoạt động:
$.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); } });
thẻ như tham số làm việc quá
$.get("http://localhost:3000/api/users?token=" + $.cookie('token')) .done(function(data){ console.log(data); });
Dưới đây là vấn đề, sử dụng tiêu đề
$.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); } });
Tôi cũng đã cố gắng add x-access-dấu hiệu như tiêu đề trên ajaxSetup
$.ajaxSetup({
headers: {
'x-access-token': $.cookie('token')
}
});
tôi tiếp tục nhận được 403, đó là mã thông báo không được cung cấp, tôi nghĩ rằng đó là một vấn đề CORS vì vậy tôi đã cố gắng sử dụng gói CBS npm https://github.com/expressjs/cors không hoạt động, tôi đã cố gắng để thực hiện điều này.
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();
});
// cập nhật thông tin về 22 tháng 8 năm 2016
Nếu tôi sử dụng như sau trong Safari, nó hoạt động:
$.ajax({
type:'GET',
url :"http://localhost:3000/api/users",
headers : { "Authorization" : $.cookie('token') },
success: function(data, status) {
console.log("Status " + status);
console.log(data);
}
});
Nhưng một số cách nó đi để cả hai nếu và tuyên bố khác, vì vậy nó phản hồi tuyến đường tiếp theo mà còn hiển thị thông báo 403.
Bạn có mã phía máy chủ? Nếu bạn chạy xác minh với các phương pháp khác và chúng đã thành công nhưng cookie của bạn không, bạn có nhớ xóa 'Bearer' khỏi cookie trước khi xác thực mã thông báo không? – Mike
@ Giống như tôi cập nhật mã máy chủ vấn đề là nó đi trực tiếp đến câu lệnh khác, có nghĩa là mã thông báo không có ở tất cả – Hilmanrdn
thử sử dụng đối tượng trong tiêu đề ajax: {'X-Auth-Token': token} OR .. tiêu đề : { 'Ủy quyền': 'Bearer' + $ .cookie ('token') }, C ALNG TRY thêm nội dung 'Tiêu đề': 'application/json', 'Accept': 'application/json' – owaishanif786