Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS:页面刷新时保留登录信息_Javascript_Html_Angularjs_Login_Cookiestore - Fatal编程技术网

Javascript AngularJS:页面刷新时保留登录信息

Javascript AngularJS:页面刷新时保留登录信息,javascript,html,angularjs,login,cookiestore,Javascript,Html,Angularjs,Login,Cookiestore,我试图在页面刷新时保留用户信息。为此,我使用了cookieStore。因此,Angular应用程序中的跑步模块如下所示 .run(['$rootScope', '$cookieStore', '$state', function($rootScope, $cookieStore, $state) { $rootScope.$on('$stateChangeStart', function(event, toState, toParams, $location){ var

我试图在页面刷新时保留用户信息。为此,我使用了
cookieStore
。因此,Angular应用程序中的跑步模块如下所示

.run(['$rootScope', '$cookieStore', '$state', function($rootScope, $cookieStore, $state) {
    $rootScope.$on('$stateChangeStart', function(event, toState, toParams, $location){
        var requireLogin = toState.data.requireLogin;

            if(typeof $rootScope.user == 'undefined'){
                $rootScope.user=$cookieStore.get("user");
                $rootScope.sessionid=$cookieStore.get("session");
            }
            if(requireLogin && typeof $rootScope.user === 'undefined'){
                event.preventDefault();
                 $state.go('login', null, {notify: false}).then(function(state) {
                        $rootScope.$broadcast('$stateChangeSuccess', state, null);
                 });
            }
    });
我想从中实现的两个主要目标是

  • 当页面刷新时,必须从浏览器的本地存储中获取
    用户
    会话
    信息
  • 如果用户未定义,则必须将其重定向到登录页面。它用于限制用户不登录就进入中间页面
  • 如果用户未定义,且数据在本地存储器中不可用,则第一个
    If语句
    给出错误,第二个
    If语句
    不起作用

    因此,当用户第一次尝试访问任何页面而不进入登录页面时,它不会重定向到登录页面,因为第一个
    if语句中的代码失败,第二个
    if
    语句不起作用

    如何同时实现这两种功能


    谢谢

    您可以创建一个
    authInterceptor
    工厂并将其推入
    interceptors

    此方法将始终检查用户是否在每个页面上登录,如果用户未通过身份验证,则将用户抛出登录页面

    用于全局错误处理、身份验证或任何类型的 请求或请求的同步或异步预处理 在对响应进行后处理时,最好能够拦截 在将请求移交给服务器之前进行请求,并在提交之前进行响应 它们被移交给启动这些应用程序的应用程序代码 请求。拦截器利用promise API来满足同步和异步预处理的需求

    了解更多关于

    通过上述机制,您可以使用
    Auth
    服务在任何
    控制器
    指令
    中获取
    用户
    信息,如下所示:

    .controller('MainCtrl', function ($scope, Auth) {
      $scope.currentUser = Auth.getCurrentUser;
    });
    
    在模板文件中:

    <div ng-controller="MainCtrl">
      <p> Hi {{currentUser().name}}!</p>
    </div>
    
    
    你好{{currentUser().name}}


    注意:您需要创建一个适当的REST API,以便获得正确的
    用户
    数据我将研究如何使用ngStorage。我使用sessionStorage对象,即使在刷新时也会保留数据。如果您需要进一步的实施例子,请让我知道,但文件是伟大的


    谢谢。我会关注这一点。我的大多数应用程序都会使用它,不会出现问题。我建议在工厂包装,这样你就可以注射了。类似于“storageService”,然后调用$scope.something=storageService.something。等等,谢谢。我试试看。
    <div ng-controller="MainCtrl">
      <p> Hi {{currentUser().name}}!</p>
    </div>