Как заставить обработчик перехода ждать, пока запрос checkAuth()
от моего API завершится неудачей, прежде чем он перенаправит пользователя на страницу входа без успешного разрешения обработчика перехода?
Это переходная точкаУ меня есть код:
app.js
angular.module('app')
.run(function ($state, $transitions, AuthService) {
$transitions.onBefore({ to: 'auth.**' }, function() {
AuthService.isAuthenticated().then(function (isAuthenticated) {
if (!isAuthenticated) {
$state.go('login');
}
});
});
});
Я использую сервис $state
для перенаправления пользователя на страницу входа, когда неаутентифицированный пользователь пытаетсячтобы получить доступ к авторизованному ограниченному представлению.Но в этой реализации переход onBefore()
уже разрешен, поэтому переход выполняется успешно до завершения моего метода checkAuth()
.Таким образом, он по-прежнему показывает представление, на которое он собирается в течение (split) sec, прежде чем он перейдет к представлению входа в систему.
Вот реализация методов службы аутентификации, использованных в приведенном выше коде:
auth.service.js
authService.isAuthenticated = function () {
// Checks if there is an authenticated user in the app state.
var authUser = AuthUserStore.get();
if (authUser) {
return Promise.resolve(true);
}
// Do check auth API request when there's no auth user in the app state.
return authService.checkAuth()
.then(function () {
return !!AuthUserStore.get();
});
};
authService.checkAuth = function () {
return $http.get(API.URL + 'check-auth')
.then(function (res) {
// Store the user session data from the API.
AuthUserStore.set(res.data);
return res;
});
};