2016-08-21 16 views
6

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:

  1. 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); 
        } 
    }); 
    
  2. thẻ như tham số làm việc quá

    $.get("http://localhost:3000/api/users?token=" + $.cookie('token')) 
    .done(function(data){ 
        console.log(data); 
    }); 
    
  3. 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.

+0

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

+0

@ 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

+0

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

Trả lời

0

tôi thay đổi CORS tôi thiết lập bằng cách sử dụng một gói nút

https://github.com/expressjs/cors 

cho đến nay nó hoạt động bằng cách sử dụng nó

$.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); 
      } 
     }); 
Các vấn đề liên quan