我想在这里完成两件事:
1)从登录界面将用户名和密码传递给getToken.getToken(),后者又调用getTokenFromServer.getToken,将令牌设置为返回的令牌值。
2)每次从Angular控制器调用getToken.getToken,但这次只返回已经检测到的令牌,我假设它存储在getToken工厂中,因为它是一个单例?
我是否在使用AngularJS / Web API 2身份验证进入正确的轨道?
我知道getTokenFromServer.getToken如果给定用户名和密码,它将返回一个有效的令牌。但是我不知道从那里到底要做什么就保存令牌以便后续调用需要令牌的控制器。谢谢你的帮助。
securityApp.factory("getToken", function (getTokenFromServer) {
function getToken(userName, password) {
var token;
if (!!token) {
getTokenFromServer.getToken(username, password).then(function (data) {
token = data;
});
};
return token;
}
});
securityApp.factory("getTokenFromServer", function ($http, $q) {
function getToken(userName, password) {
return $http({
method: 'POST', url: '/token', data: { username: userName, password: password, grant_type: 'password' }, transformRequest: function (obj) {
var str = [];
for (var p in obj)
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
return str.join("&");
}
})
.then(function (result) {
return result.data.access_token;
}, function (errorResponse) {
return $q.reject(errorResponse.data);
});
}
return {
getToken: getToken
};
});
答案 0 :(得分:3)
您只需要从Auth服务器获取访问令牌一次(从服务器请求令牌),直到它过期。
获得令牌后,您需要将其存储在html本地存储上,并使用httpInterceptor
服务继续使用授权标头发送每个后续请求。
我写了一系列详细的帖子,有一个确切地解决了你的问题。您可以阅读更多AngularJs Authentication using Web API 2
如果您需要进一步的帮助,请给我发表评论。