【发布时间】:2015-12-14 15:01:13
【问题描述】:
我正在开发一个 Web 应用程序,我正在尝试在其中实施 jwt 身份验证以确保安全。我将生成的令牌发送到客户端并将其保存在标头中,但是当我发送 http 请求 时,标头在服务器端显示为空。
这是登录模块的服务器端代码部分。
var profile = {
name:rows[0].name,
email:rows[0].email,
role:rows[0].role_id
};
var token = jwt.sign(profile,'shhhhhhared-secret',{expiresInMinutes: 60*5 });
res.json({
success: true,
user: rows[0], //userobject
token: token
});
这是我们在 sessionstorage 中设置响应的控制器部分。
dbServices.UserAuthenticate($scope.email,
$scope.password).then(function(response) {
$rootScope.showLoader = false;
if (response.data.success) {
var session_data = {
'token':response.data.token,
'user':{
'name':response.data.user.name,
'role':response.data.user.role_id,
'email':response.data.user.email
}
};
sessionStorage.sessionData = JSON.stringify(session_data);
$location.path('/');
} else {
$scope.msg = 'Invalid Email or Password!'
}
})
这是我设置标题的配置文件
App.factory('authInterceptor', ['$rootScope', '$q', '$window',
function($rootScope, $q, $window) {
return {
request: function(req) {
req.headers = req.headers || {};
if (sessionStorage.sessionData.token) {
req.headers.Authorization = 'Bearer ' + sessionStorage.sessionData.token;
}
return req;
},
response: function(response) {
if (response.status == 401) {
console.log('header auth 401 login');
$window.location = '/login';
}
return response || $q.when(response);
}
}
}
]);
App.config(function ($httpProvider) {
$httpProvider.interceptors.push('authInterceptor');
});
我不明白这有什么问题。谁能帮帮我。
【问题讨论】:
-
看起来 sessionStorage 是未定义的......你可能需要注入它。
标签: angularjs node.js authentication jwt