2016-08-21 3 views
6

Ich baue derzeit eine API mit NodeJS mit JSONWebtoken. Wenn ich versuche, mit dem Token im Header zu konsumieren, erhalte ich den Fehler 403 und es geht direkt zur else-Anweisung im folgenden Code, was bedeutet, dass Token überhaupt nicht vorhanden ist.JWT mit JQuery konsumieren, ständig einen Fehler

Hier ist, wie ich Token erhalten auf Server-Seite:

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' 
    }) 
    } 
}); 

auf Client-Seite, ich bin mit JQuery und es in Cookie speichern:

  1. Token als Daten funktioniert:

    $.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. Token als Parameter arbeitet auch

    $.get("http://localhost:3000/api/users?token=" + $.cookie('token')) 
    .done(function(data){ 
        console.log(data); 
    }); 
    
  3. Hier ist das Problem, Kopf

    $.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); 
        } 
    }); 
    

ich auch versucht, Add x-access-Token als Header auf ajaxSetup

$.ajaxSetup({ 
      headers: { 
      'x-access-token': $.cookie('token') 
      } 
     }); 

mit behalte ich 403 bekommen, das ist Token nicht zur Verfügung gestellt, ich denke, es ist ein CORS Problem, so habe ich versucht, CORS NPM-Paket verwenden https://github.com/expressjs/cors funktioniert nicht, ich habe versucht, dies zu implementieren.

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(); 
}); 

// Update-Informationen auf 22. August 2016

Wenn ich folgendes in Safari verwenden, funktioniert es:

$.ajax({ 
     type:'GET', 
     url :"http://localhost:3000/api/users", 
     headers : { "Authorization" : $.cookie('token') }, 
     success: function(data, status) { 
     console.log("Status " + status); 
     console.log(data); 
     } 
    }); 

Aber einige, wie es beide, wenn und sonst Aussage geht, so es antwortet auf die nächste Route, zeigt aber auch die Nachricht 403 an.

+0

Haben Sie Server-Seite Code? Wenn Sie die Überprüfung mit den anderen Methoden durchgeführt haben und diese erfolgreich waren, aber Ihr Cookie nicht war, haben Sie daran gedacht, 'Bearer' aus dem Cookie zu entfernen, bevor Sie das Token validieren? – Mike

+0

@Mike Ich aktualisiere den Server-Code das Problem ist, es geht direkt auf die Else-Anweisung, was Token überhaupt nicht – Hilmanrdn

+0

versucht mit Objekt in AJAX-Header: {'X-Auth-Token': Token} OR .. Header : { 'Authorization': 'Bearer' + $ .cookie ('Token') }, AUCH VERSUCHEN, Header 'Content-Type' hinzuzufügen: 'application/json', 'Akzeptieren': 'application/json' – owaishanif786

Antwort

0

i mein cors unter Verwendung eines Knotenpaket

https://github.com/expressjs/cors 

so Einstellung ändern weit es funktioniert, indem Sie es

$.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); 
      } 
     });