2016-07-19 21 views
0

Eine AngularJS-App muss ein JWT mit der Node.js-Instanz austauschen, die es bedient. Die Node.js-Instanz verfügt über eine /user-Route, die eine JWT an den Angular-Client zurückgibt. Welche spezifischen Änderungen müssen an dem folgenden Code vorgenommen werden, damit 1.) die AngularJS-App die JWT zurück an die Route /user der Instanz Node.js senden kann und 2.) der Node.js-Code die JWT als Variable isolieren kann zum Bearbeiten?Senden von JWT von AngularJS an Node.js

Der aktuelle AngularJS Code für die Back-End-/user Route Aufruf ist:

$http.get('user').then(function(response) { 
     console.log('response is: '); 
     console.log(response); 
     if (response.data.token === 'anonymous') { 
      $rootScope.authenticated = false; 
     } else { 
      $rootScope.userJWT = response.data.token; 
      var payload = $rootScope.userJWT.split('.')[1]; 
      payload = $window.atob(payload); 
      payload = JSON.parse(payload); 
      self.name = payload.name; 
      self.authorities = payload.authorities; 
      $rootScope.authenticated = true; 
     } 
    }, function() { 
     $rootScope.authenticated = false; 
    }); 

Und der Node.js-Code für die Back-End-/user Route ist:

app.get('/user**', function(req, res) { 
    console.log("You Hit The User Route TOP"); 
    //How do we get the JWT from req? 
    var user = getUserName(theJwt); 
    var token = getToken(user); 
    var jwtJSON = getUser(token); 
    if((jwtJSON["token"] == 'error') || jwtJSON["token"] == 'anonymous') { 
     res.sendStatus(500); // Return back that an error occurred 
    } else { 
     res.json(jwtJSON); 
    } 
    console.log("You Hit The User Route BOTTOM"); 
}); 

Hinweis, die Node.js Beispiel enthält var jwt = require('jsonwebtoken');, und eine der Verarbeitungsmethoden wird die JWT unter Verwendung var decoded = jwt.decode(token, {complete: true});, wie the jsonwebtoken API dekodieren.

+0

Dieser GitHub Repo für Satellizer hat ein komplettes Beispiel: https: // github.com/sahat/satellizer/tree/master/examples –

+0

@ TaylorAckley I möchte die 'jsonwebtoken' API benutzen. Ich möchte das auch extrem einfach halten, damit ich meine eigene App aus den Grundlagen aufbauen kann. Die Antwort ist wahrscheinlich so einfach, wie man dem AngularJS 'get ('/ user')' einen 'Authorization header' hinzufügt und dann diesen' Authorization header' in der Node.js '/ user'route im kleinen isolieren kann Code-Schnipsel im OP oben. – FirstOfMany

Antwort

2

Bei der Verwendung von JWT ist keine Kommunikation mit dem Token erforderlich.

Die gebräuchlichste Methode besteht darin, das Token in einen HTTP-Header zu platzieren.

Auf der AngularJS-Seite würden Sie eine HTTP-Anfrage mit einem zusätzlichen Header (z. B. X-Auth-Token), die die JWT enthält.

Beispiel AngularJS Seite:

var config = { 
    headers: { 
     "X-Auth-Token": $rootScope.userJWT 
    } 
} 
$http.get('routeThatNeedsJWT', config).then(function(response) { ... }); 

Auf der Node.js Seite würden Sie den Inhalt des Headers und verarbeiten sie mit der jsonwebtoken Bibliothek erhalten.

Beispiel Node.js Seite:

app.get('/routeThatNeedsJWT', function(req, res) { 
    var rawTokenFromHeader = req.get('X-Auth-Token'); // Get JWT from header 
    try { 
     var jwtJSON = jwt.verify(token, 'secret'); // Verify and decode JWT 
     res.json(jwtJSON); 
    } catch (err) { 
     res.sendStatus(500); // Return back that an error occurred 
    } 
}); 

Hilfreiche Links:

Express 4.x getting header value

jsonwebtoken library verify token

Verwandte Themen