Nút và Góc. Tôi có một ứng dụng xác thực ngăn xếp MEAN nơi tôi đang thiết lập mã thông báo JWT khi đăng nhập thành công như sau và lưu trữ nó trong một phiên trong bộ điều khiển. Gán token JWT để config.headers thông qua dịch vụ đánh chặn:NodeJs - Truy xuất thông tin người dùng từ mã thông báo JWT?
var token = jwt.sign({id: user._id}, secret.secretToken, { expiresIn: tokenManager.TOKEN_EXPIRATION_SEC });
return res.json({token:token});
authservice.js Interceptor (bỏ qua requestError, phản ứng và 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;
}
};
}]);
Bây giờ tôi muốn có được đăng nhập chi tiết người dùng từ mã thông báo, Tôi có thể làm như thế nào? Tôi đã cố gắng như sau, không làm việc. Khi tôi đăng nhập lỗi từ Users.js nộp nó nói "ReferenceError: tiêu đề không được định nghĩa"
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 (Nút):
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);
}
Tôi có phải chuyển mã thông báo làm thông số để truy xuất chi tiết người dùng không? Hoặc lưu chi tiết người dùng trong một biến phiên riêng biệt?
Cảm ơn bạn rất nhiều! Nó đã làm việc. Chỉ cần thực hiện một thay đổi đơn giản được giải mã = jwt.verify (authorization.split ('') [1], secret.secretToken); vì tôi có mã thông báo Bearer + làm mã thông báo của mình. – Srini
Tôi tìm thấy nhiều lợi thế hơn khi sử dụng JWT thay vì sử dụng hộ chiếu. Tôi đang theo dõi hai điều sau: http://www.kdelemme.com/2014/03/09/authentication-with-angularjs-and-a-node-js-rest-api/ và http: //code.tutsplus. com/tutorials/token-based-authentication-với-angularjs-nodejs - cms-22543. Xin vui lòng tư vấn nếu hộ chiếu là một lựa chọn tốt. – Srini
Hộ chiếu có thể sử dụng JWT giống nhau. Nó chỉ cung cấp cho bạn một sự trừu tượng thuận tiện từ các thủ tục xác thực. Mã bộ định tuyến của tôi cho các phương thức được bảo vệ giống như sau: 'app.get ('/ api/content', passport.authenticate ('ủy quyền cục bộ', { phiên: false }), api.listContent);' –