Node 和 Angular 。我有一个 MEAN 堆栈身份验证应用程序,我在成功登录时设置 JWT token ,如下所示,并将其存储在 Controller 的 session 中。通过服务拦截器将 JWT token 分配给 config.headers:
var token = jwt.sign({id: user._id}, secret.secretToken, { expiresIn: tokenManager.TOKEN_EXPIRATION_SEC });
return res.json({token:token});
authservice.js 拦截器(省略 requestError、response 和 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;
}
};
}]);
现在我想从 token 中获取登录用户的详细信息,我该怎么做?我尝试如下,不工作。当我从 Users.js 文件中记录错误时,它显示“ReferenceError: headers is not defined”
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);
}
我是否也必须将 token 作为参数传递以检索用户详细信息?还是将用户详细信息也保存在单独的 session 变量中?
最佳答案
首先,使用 Passport 中间件进行用户授权处理是一个很好的做法。它承担了解析请求的所有繁琐工作,还提供了许多授权选项。 现在为您的 Node.js 代码。 您需要使用 jwt 方法验证和解析传递的 token ,然后通过从 token 中提取的 id 找到用户:
exports.me = function(req,res){
if (req.headers && req.headers.authorization) {
var authorization = req.headers.authorization.split(' ')[1],
decoded;
try {
decoded = jwt.verify(authorization, secret.secretToken);
} catch (e) {
return res.status(401).send('unauthorized');
}
var userId = decoded.id;
// Fetch the user by id
User.findOne({_id: userId}).then(function(user){
// Do something with the user
return res.send(200);
});
}
return res.send(500);
}
关于javascript - NodeJs - 从 JWT token 中检索用户信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33451298/