我已经创建了一个基于 token 的身份验证系统,但需要一种方法让 Angular 知道用户是否登录。
登录的用户将在 session 存储中拥有身份验证 token 。我想设置一个变量,例如 $scope.isLoggedIn = true
,如果 if ( $window.sessionStorage.token )
为 true。
然后我将使用 ng-if="isLoggedIn"
根据需要显示和隐藏页面上的元素。当然,在显示任何个人信息之前,都会对 token 进行身份验证。这基本上是显示或隐藏登陆页面的一种方式。
我可以在 Controller 中执行此操作,但我必须在每个 Controller 中执行此操作。我可以通过工厂来做吗?
这是我尝试过的,但是有更好的方法吗?谢谢。
在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;
}])
最佳答案
我已经使用服务做了类似的事情。我的有点复杂,因为我是从 indexeddb 而不是 localstorage 获取数据(我相信 ls 是同步而不是异步。
无论如何,我的代码最终是这样的......
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
};
}]);
然后我在 Controller 中访问它,如下所示:
angular.module('App').controller('Controller', ['$scope', '$interval', 'DataService', function($scope, $interval, DataService) {
var somevar = DataService.function1();
}]);
正如您所看到的,这与您的想法非常相似。我认为这是一条非常好的路线。
关于javascript - 在 Angular 中检查 sessionStorage 并将变量传递给 $scope 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27954616/