#angularjs #angular-ui-router
#angularjs #angular-ui-router
Вопрос:
У меня есть этот код
//Setting up route
angular.module('my')
.config(['$stateProvider',function($stateProvider) {
// Check if the user is just logged
var checkLoggedOut = function($http) {
/* if the user is just logged the server send a Forbidden status 403*/
return $http.get('/loggedout');
};
// Check if the user is logged
var checkLoggedIn = function($http) {
return $http.get('/loggedin');
};
// states for my app
$stateProvider
.state('user', {
abstract: true,
templateUrl: 'users/views/index.html',
resolve: {
loggedin: checkLoggedIn
}
})
.state('user_register', {
url: '/user/register',
templateUrl: 'users/views/register.html',
resolve: {
loggedin: checkLoggedOut
},
controller:'UserRegisterCtrl'
});
}
]);
если пользователь только что вошел в систему, он не может перейти в состояние user_register
но шаблон все еще загружен.
Является ли это желаемым поведением ?
Есть ли способ избежать этого?
Обновить
может быть, мой вопрос может быть неправильно понят
Я хочу знать, есть ли способ избежать загрузки шаблона, если разрешение отклонено, я имею в виду, в целом, с какой стати шаблон загружается при отклонении разрешения imo, если разрешение не выполняется, шаблон не должен загружаться
В КОНЕЧНОМ ИТОГЕ С
.factory('httpInterceptor', ['$q','$location',function ($q, $location) {
return {
'response': function(response) {
if (response.status === 401) {
$location.path('/signin');
return $q.reject(response);
}
if (response.status === 403) {
$location.path('/');
return $q.reject(response);
}
return response || $q.when(response);
},
'responseError': function(rejection) {
if (rejection.status === 401) {
$location.path('/signin');
return $q.reject(rejection);
}
if (rejection.status === 403) {
$location.path('/');
return $q.reject(rejection);
}
return $q.reject(rejection);
}
};
}
Ответ №1:
Во-первых, выполнение вызова REST для проверки того, входит ли пользователь в систему при каждом переходе состояния, может быть дорогостоящим. Возможно, просто было бы лучше сохранить состояние пользователя в браузере.
Во-вторых, еще один вопрос, который вы задаете: вы можете создать обработчик событий для прослушивания события $stateChangeStart. В этом обработчике вы можете проверить, вошел ли пользователь в систему и сможет ли он получить доступ к этому состоянию.
Эта ссылка должна помочь http://www.frederiknakstad.com/2014/02/09/ui-router-in-angular-client-side-auth /
Комментарии:
1. ммм, я не спрашиваю, как это сделать, но с какой стати, если разрешение отклонено, шаблон загружается, и если есть способ избежать этого, извините, я дал вам -1
Ответ №2:
Ваша функция checkLoggedIn должна управлять случаем, когда пользователь не прошел проверку подлинности. Он может перенаправить его в соответствующее состояние, используя $state.go() или $location.