Aktualnie buduję API z NodeJS przy użyciu JSONWebtoken. Kiedy próbuję zużywać token w nagłówku, otrzymuję błąd 403 i przechodzi bezpośrednio do instrukcji else w poniższym kodzie, co oznacza, że tokena w ogóle nie istnieje.Spożywanie JWT z JQuery, ciągle otrzymuję błąd
Oto jak uzyskać żeton na stronie serwera:
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'
})
}
});
na stronie klienta, używam jQuery i zapisać go w pliku cookie:
żeton jak działa dane:
$.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); } });
żeton jako parametr działa zbyt
$.get("http://localhost:3000/api/users?token=" + $.cookie('token')) .done(function(data){ console.log(data); });
Tutaj jest problem, używając nagłówku
$.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); } });
Próbowałem również Dodaj x-access-żeton jako cel na ajaxSetup
$.ajaxSetup({
headers: {
'x-access-token': $.cookie('token')
}
});
Wciąż dostaję 403, który jest nie podano tokena, myślę, że jest to kwestia CORS, więc próbowałem użyć pakietu CORS npm https://github.com/expressjs/cors nie działa, próbowałem to zaimplementować.
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();
});
// aktualizacji informacji w dniu 22 sierpnia 2016
jeśli mogę użyć następujących w Safari, to działa:
$.ajax({
type:'GET',
url :"http://localhost:3000/api/users",
headers : { "Authorization" : $.cookie('token') },
success: function(data, status) {
console.log("Status " + status);
console.log(data);
}
});
ale niektóre jak to zarówno wtedy, else, więc odpowiada na następną trasę, ale pokazuje także komunikat 403.
masz kodu po stronie serwera? Jeśli przeprowadziłeś weryfikację innymi metodami i zakończyły się one sukcesem, ale Twój plik cookie nie był, czy pamiętasz, aby usunąć "Okaziciela" z pliku cookie przed sprawdzeniem tokena? – Mike
@Mike i aktualizuję kod serwera, problem polega na tym, że przechodzi bezpośrednio do instrukcji else, co oznacza, że token w ogóle nie istnieje – Hilmanrdn
spróbuj użyć obiektu w nagłówkach ajax: {'X-Auth-Token': token} OR .. headers : { 'Authorization': 'Bearer' + $ .cookie ('token') } TAKŻE SPRÓBUJ możesz dodać nagłówki "Content-Type": "application/json", "Accept": 'application/json' – owaishanif786