javascript - 在 Angular 中检查 sessionStorage 并将变量传递给 $scope 的正确方法是什么?

标签 javascript angularjs session

我已经创建了一个基于 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/

相关文章:

javascript - 刷新后如何保留localStorage值?

javascript - ng-keypress 调用 angularjs 中的函数

sqlite - 无法让 PHP session 保存处理程序 sqlite 工作

php - Symfony 4,登录,如何调试错误 'Invalid credentials'?

javascript - NodeJS 和类限制

javascript - 在 Bootstrap 模式上显示谷歌地图

javascript - 停止 $timeout - AngularJS

javascript - 如何在 angularjs 中将 SignalR 与多个 Controller 一起使用

angularjs - 根据 Controller 中的数据使用 Angular 和 UI-Router 设置页面标题

php - 无法将唯一 session 值从一个页面传输到另一个页面