節點和角度。我有一個MEAN堆棧身份驗證應用程序,我正在成功登錄時設置JWT令牌,如下所示,並將其存儲在控制器中的會話中。通過服務攔截分配JWT令牌config.headers:NodeJs - 從JWT令牌中檢索用戶信息?
var token = jwt.sign({id: user._id}, secret.secretToken, { expiresIn: tokenManager.TOKEN_EXPIRATION_SEC });
return res.json({token:token});
authservice.js攔截器(省略requestError,響應和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;
}
};
}]);
現在我想獲得用戶的詳細信息,從記錄令牌,我該怎麼做?我嘗試如下,不工作。當我登錄從Users.js錯誤文件的時候就會說 「的ReferenceError:頭沒有定義」
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(節點):
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);
}
我是否還必須將令牌作爲參數傳遞以檢索用戶詳細信息?或者將用戶詳細信息保存在單獨的會話變量中?
非常感謝!有效。只需要做一個簡單的更改解碼= jwt.verify(authorization.split('')[1],secret.secretToken);因爲我有持票人+令牌作爲我的代幣。 – Srini
我發現使用JWT而不是使用護照更有優勢。我遵循這兩個:http://www.kdelemme.com/2014/03/09/authentication-with-angularjs-and-a-node-js-rest-api/和http://code.tutsplus。 COM /教程/基於令牌的認證與 - angularjs-的NodeJS - CMS-22543。如果護照是一個不錯的選擇,請諮詢。 – Srini
護照可以使用JWT一樣。它只是爲您提供了一個方便的認證過程抽象。 我的受保護方法的路由器代碼如下所示: 'app.get('/ api/content',passport.authenticate('local-authorization',{ session:false }),api.listContent);' –