![](/img/trans.png)
[英]How do I get an ID that is part of a URL, in angularjs? I am using Restangular to communicate with REST API's
[英]How do I handle Token Authentication with AngularJS and Restangular?
我有一个角度应用程序,使用Restangular
和ui.router.state
。
我有一个端点/令牌接受用户名/通行证,并返回一个持票人令牌和一些用户信息。
成功登录后,我将userinfo和token保存到全局var,user.current中,并且还设置Restangular的默认标头以包含承载标记:
Restangular.setDefaultHeaders({Authorization:“Bearer”+ data.access_token});
当用户想要访问具有requiredAuth = true的路由时(在routeprovider中设置为自定义数据,如Access routeProvider的路由属性 ),我检查user.current以查看其是否设置。
一个。 如果设置了user.current,则将它们带到路径。
湾 如果user.current为null或者令牌将过期(基于时间),请将它们发送到/ login
如果我Ctrl+R
我丢失了我的用户信息,用户必须再次登录。
一个。 我应该将持有人令牌或凭证保存到cookie或其他内容并让用户服务尝试在user.current == null
的情况下抓住它吗?
我是否接近这个权利? 看起来像是100%使用AngularJS的人想做的事情,但是,我找不到与我的情况一致的例子。 看起来像Angular会内置机制来处理一些auth路由业务......
我什么时候需要获取新令牌/验证当前令牌? 我是否只允许任何使用devtools的人设置类似isAuthorized = true
东西,这样他们就可以访问/ admin / importantThings但是然后让对/ api / important重要事项的调用失败,因为他们没有有效的不记名令牌,或者我应该验证在我让他们到达那条路线之前,他们有一个有效的令牌?
您可以将它放在localStorage (始终保留)或sessionStorage (在浏览器关闭时清除)。 从技术上讲,Cookie也是一种可能性,但不适合您的用例(您的后端检查单独的标题而不是cookie)
我想有很多方法可以给猫皮肤。
始终依赖于服务器端检查。 客户端检查可能会提供一些增加的可用性,但您永远不能依赖它们。 如果你有很多按钮导致进入登录屏幕,那么如果你保持客户端检查,它会更快。 如果这是一个例外而不是规则,您可以在调用后端时获得401 Unauthorized
时重定向到登录页面。
以下是如何管理令牌的示例:
/ *全球角* /
'use strict';
(function() {
angular.module('app').factory('authToken', ['$window', function($window) {
var storage = $window.localStorage;
var cachedToken;
var userToken = 'userToken';
var authToken = {
setToken: function(token) {
cachedToken = token;
storage.setItem(userToken, token);
},
getToken: function() {
if (!cachedToken) {
cachedToken = storage.getItem(userToken);
}
return cachedToken;
},
isAuthenticated: function() {
return !!authToken.getToken();
},
removeToken: function() {
cachedToken = null;
storage.removeItem(userToken);
}
};
return authToken;
}]);
})();
如您所见,我使用“$ window.localStorage”来存储我的令牌。 就像“ Peter Herroelen ”在文章中所说。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.