Page 183 - AngularJS权威教程
P. 183
16.7 使用 AngularJS 进行身份验证 163
上面每一个路由都定义了自身的access_level,可以根据这一点判断当前用户的授权状态, 1
以及用户的级别是否有权限访问当前路由。
此时,用户可能处于以下两种状态: 2
未经过身份验证的匿名用户;
通过身份验证的已知用户。 3
为了验证用户的身份,需要创建一个服务来对已经存在的用户进行监视。同时需要让服务能
够访问浏览器的cookie,这样当用户重新登录时,只要会话有效就无需再次进行身份验证。 4
这个小服务包含了一些操作用户对象的辅助函数:
5
angular.module('myApp.services', [])
.factory('Auth', function($cookieStore,ACCESS_LEVELS) {
var _user = $cookieStore.get('user');
6
var setUser = function(user) {
if (!user.role || user.role < 0) {
user.role = ACCESS_LEVELS.pub; 7
}
_user = user;
$cookieStore.put('user', _user);
}; 8
return {
isAuthorized: function(lvl) { 9
return _user.role >= lvl;
},
setUser: setUser,
isLoggedIn: function() { 10
return _user ? true : false;
},
getUser: function() { 11
return _user;
},
getId: function() {
return _user ? _user._id : null; 12
},
getToken: function() {
return _user ? _user.token : ''; 13
},
logout: function() {
$cookieStore.remove('user'); 14
_user = null; }
}
};
}); 15
现在,当用户已经通过身份验证并登录后,可以在$routeChangeStart事件中对其有效性进
行检查。 16
angular.module('myApp', [])
.run(function($rootScope, $location, Auth) { 17
// 给$routeChangeStart设置监听
$rootScope.$on('$routeChangeStart', function(evt, next, curr) {
if (!Auth.isAuthorized(next.$$route.access_level)) { 18