我已经创建了一个基于令牌的身份验证系统,但需要一种方法让Angular知道用户是否已登录。
已登录的用户将在会话存储中拥有身份验证令牌。如果$scope.isLoggedIn = true
为真,我想设置一个变量,例如if ( $window.sessionStorage.token )
。
然后我会根据需要使用ng-if="isLoggedIn"
在页面上显示和隐藏元素。当然,在显示任何个人信息之前,会对令牌进行身份验证。这基本上是一种显示或隐藏登录页面的方式。
我可以在控制器中执行此操作,但我必须在每个控制器中执行此操作。我可以和工厂一起做吗?
这是我尝试过的,但有更好的方法吗?感谢。
app.config
:$httpProvider.interceptors.push('authCheck')
app.factory
://
// set a scope variable for whether a user is signed in or not
//
.factory('authCheck', [ '$window', '$rootScope', function ( $window, $rootScope ) {
$rootScope.isLoggedIn = false;
if ( $window.sessionStorage.token ) {
$rootScope.isLoggedIn = true;
}
return $rootScope.isLoggedIn;
}])
答案 0 :(得分:1)
我使用服务做了类似的事情。我有点复杂,因为我从indexeddb而不是localstorage获取数据(我相信这是同步而不是异步。
无论如何,我的代码最终变成了......
angular.module('App').service('DataService', ['$indexedDB', 'storeName', 'emptyCharacter', function($indexedDB, storeName, newObject){
function function1(propertyName){
return "something";
};
function function2(objects){
return 55;
};
return {
foo : function1,
bar : function2
};
}]);
然后我在我的控制器中访问它,如:
angular.module('App').controller('Controller', ['$scope', '$interval', 'DataService', function($scope, $interval, DataService) {
var somevar = DataService.function1();
}]);
正如您所看到的,它与您的想法非常相似。我认为这是一条非常好的路线。