Я хочу проверить службы http, чтобы узнать, проверен ли пользователь и имеет ли он разрешение на просмотр определенной страницы (контроллера) в AngularJS 1.2.0rc1.
У меня такой сценарий: Пользователь A хочет посетить http://www.example.com/content. Теперь этот контент не должен быть доступен, если он или она не аутентифицированы. Если пользователь не аутентифицирован, он должен быть перенаправлен на http://www.example.com/login.
Теперь мне это удалось, но я кратко просмотрел отображаемый html страницы контента. Я не хочу этого. Как переадресовать на страницу входа, не отображая страницу содержимого?
Я регистрирую маршруты как таковые:
$routeProvider.when('/login', route.resolve('Login', false))
$routeProvider.when('/content', route.resolve('Content', true))
Теперь я пробовал это:
$rootScope.$on('$routeChangeStart', function (event, route) {
if (route.requiresLogin) {
$http.get('/api/user/loggedin/').then(function (response) {
if (response !== 'true') {
$location.path('/login');
}
});
}
});
Что работает, но я все еще вижу, что содержимое html другой страницы (содержимого) мигает.
Я читал, что здесь, что вы также можете попытаться изменить функции разрешения при разрешении маршрута:
var resolve = function (baseName, requiresLogin) {
var routeDef = {};
var dependencies = [routeConfig.getControllersDirectory() + baseName + 'Controller.js'];
routeDef.templateUrl = routeConfig.getViewsDirectory() + baseName.toLowerCase() + '.html';
routeDef.controller = baseName + 'Controller';
routeDef.requiresLogin = requiresLogin;
routeDef.resolve = {
load: ['$q', '$rootScope', '$http', '$location', function ($q, $rootScope, $http, $location) {
console.log(requiresLogin);
if (requiresLogin) {
return checkLoggedIn($q, $rootScope, $http, $location);
} else {
return resolveDependencies($q, $rootScope, dependencies);
}
}]
};
return routeDef;
}
Но здесь также отображается короткая страница.
Надеюсь, что вы можете мне помочь.