Как мне получить фабрику authCheck для запуска перед функцией «Проверить состояние входа пользователя»?
Я пытаюсь проверить состояние $rootScope
на маршрутизации и HTTP запросов:
//Global Logout Function
myApp.run(function($rootScope, $http) {
$rootScope.logout = function() {
$http.post('/api/auth/logout');
};
});
//Check Login state of user
myApp.run(function($rootScope, $http, $window) {
$rootScope.$on('$routeChangeStart', function() {
$http.get('/api/auth')
.then(function successCallback(response) {
$rootScope.logStatus = response.data.data.loggedIn;
console.log('initial ' + $rootScope.logStatus);
}, function errorCallback(response) {
$rootScope.logStatus = response.data.data.loggedIn;
});
return $rootScope.logStatus;
});
});
//Check for authenticated users on http requests (API calls and Routing changes) and redirect to login if logged out
myBirkman.factory('authCheck', ['$rootScope','$window', function($rootScope, $window) {
var authCheck = {
'request': function(config) {
if ($rootScope.logStatus == true) {
//do nothing
console.log('redirect ' + $rootScope.logStatus);
} else if ($rootScope.logStatus == false) {
$window.location.href = '/login.php';
}
},
'response': function(response) {
return response;
}
};
return authCheck;
}]);
// Define routing within the app
myApp.config(['$httpProvider', '$routeProvider', function($httpProvider, $routeProvider) {
$httpProvider.interceptors.push('authCheck');
Я попытался преобразовать элемент $ rootScope постоянной, но та же проблема появляющаяся. Завод работает до функции запуска, поэтому константа не обновляется до тех пор, пока завод не запустится.
Вы пытаетесь проверить статус, прежде чем auth вернет ответ? Если нет, console.log $ rootScope – brianlmerritt
Да, console.log # 2 - это просто проверить, доступен ли rootScope (для устранения неполадок). Я оставил его, чтобы указать, где я вижу, что rootScope возвращается как неопределенный. –
См. Http://stackoverflow.com/questions/14220321/how-do-return-the-response-from-an-asynchronous-call, чтобы понять, как работает асинхронный запрос. – Thierry