我必须允许用户在用户登录时访问应用程序
如果用户未登录,则用户无法通过 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:超出最大调用堆栈大小
答案 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);
}])