Nodo e angolare. Ho un'applicazione di autenticazione dello stack MEAN in cui sto impostando un token JWT all'accesso correttamente come segue e memorizzandolo in una sessione nel controller. Assegnare il token JWT per config.headers attraverso il servizio intercettore:NodeJs - Recupera infor utente dal token JWT?
var token = jwt.sign({id: user._id}, secret.secretToken, { expiresIn: tokenManager.TOKEN_EXPIRATION_SEC });
return res.json({token:token});
authservice.js Interceptor (omesso requestError, di risposta e responseError):
authServices.factory('TokenInterceptor', ['$q', '$window', '$location','AuthenticationService',function ($q, $window, $location, AuthenticationService) {
return {
request: function (config) {
config.headers = config.headers || {};
if ($window.sessionStorage.token) {
config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token;
}
return config;
}
};
}]);
Ora volevo ottenere il loggato dettagli utente da il token, come posso farlo? Ho provato come segue, non funziona. Quando annoto l'errore da Users.js depositarne sta dicendo "ReferenceError: intestazioni non è definita"
authController.js:
$scope.me = function() {
UserService.me(function(res) {
$scope.myDetails = res;
}, function() {
console.log('Failed to fetch details');
$rootScope.error = 'Failed to fetch details';
})
};
authService.js:
authServices.factory('UserService',['$http', function($http) {
return {
me:function() {
return $http.get(options.api.base_url + '/me');
}
}
}]);
Users.js (Node):
exports.me = function(req,res){
if (req.headers && req.headers.authorization) {
var authorization =req.headers.authorization;
var part = authorization.split(' ');
//logic here to retrieve the user from database
}
return res.send(200);
}
devo passare il token come parametro troppo per recuperare i dati utente? O salvare anche i dettagli dell'utente in una variabile di sessione separata?
Grazie mille! Ha funzionato. Basta fare una semplice modifica decodificata = jwt.verify (authorization.split ('') [1], secret.secretToken); come ho un token Bearer + come mio token. – Srini
Ho trovato più vantaggi nell'utilizzo di JWT anziché utilizzare il passaporto. Sto seguendo questi due: http://www.kdelemme.com/2014/03/09/authentication-with-angularjs-and-a-node-js-rest-api/ e http: //code.tutsplus. com/tutorial/token-autenticazione-con-angularjs-nodejs base - CMS-22543. Si prega di avvisare se il passaporto è una buona scelta. – Srini
Il passaporto può usare JWT allo stesso modo. Ti fornisce solo una comoda astrazione dalle procedure di autenticazione. Il mio codice router per i metodi protetti è il seguente: 'app.get ('/ api/content', passport.authenticate ('local-authorization', { session: false }), api.listContent);' –