当用户未登录时,AngularJ阻止导航

时间:2017-04-26 10:12:08

标签: angularjs

我必须允许用户在用户登录时访问应用程序
如果用户未登录,则用户无法通过 url 重定向来访问该应用程序 在上述情况下,如果用户未登录

,则应重定向到登录页面

我试过以下方式

$rootScope.tempObj = false;

$rootScope.$on('$stateChangeStart', function (event, toState) {
if($rootScope.tempObj) {
       return;
} else {
    $state.go('login');
    event.preventDefault();
  return;
}
});

我在登录成功回调

中正在进行$rootScope.tempObj = true

但我收到错误 - RangeError:超出最大调用堆栈大小

  • 我的问题是如果用户未登录,如何阻止网址重定向..
  • 并且在没有用户登录的情况下允许忘记密码,重置密码等少数状态

2 个答案:

答案 0 :(得分:0)

将其与event.preventDefault();

一起使用
$rootScope.$on('$stateChangeStart', function(event, toState) {
    if ($rootScope.tempObj) {
        event.preventDefault();
    } else if (!$rootScope.tempObj) {
        $state.go('login');
        event.preventDefault();
    }
});

检查类似的question

答案 1 :(得分:0)

我认为这种方式不是检查用户的完美方式,如果您的应用程序通过发送http请求处理后端,您应该从$ httpProvider测试用户权限,所以在$ httpProvider中如果您获得400范围内的http代码,你应该将用户重定向到登录页面, 我会使用剪切代码来执行此操作

 .config(["$httpProvider", "$cookiesProvider", function($httpProvider, $cookiesProvider) {
    $cookiesProvider.defaults.expires = new Date(new Date().getTime() + 120 * 60 * 1000).toString();
   // $httpProvider.defaults.timeout = 50;
    var interceptor = function($q, $rootScope, $injector, $location, $filter) {
        return {
            request: function(config) {
                return config;
            },
            requestError: function(config) {
                return config;
            },
            response: function(res) {

                return res;
            },
            responseError: function(res) {
                var AUTH_EVENTS = $injector.get('AUTH_EVENTS');
                var $toastContent = $('<span>' + $filter('translate')(res.data.message) + '</span>');
                if (res.status == 403) {
                    $location.path('/logOut');
                }
                if (res.status == 402) {
                    $location.path('/home');
                    Materialize.toast($toastContent, 4000, 'danger');
                }
                if (res.status == 401) {
                    Materialize.toast($toastContent, 4000, 'danger');
                }
                // }

                return $q.reject(res);
            }
        }
    }
    interceptor.$inject = ["$q", "$rootScope", "$injector", "$location", "$filter"];
    $httpProvider.interceptors.push(interceptor);
}])