Заводская стрельба перед запуском $http-запроса

Как запустить фабрику 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 в константу, но возникает та же проблема. Фабрика работает до функции запуска, поэтому константа не обновляется до тех пор, пока не будет запущена фабрика.

2 ответа

Решение

Большое спасибо Адитье. Решение состояло в том, что мое форматирование для функции перехватчика было неправильным. После переформатирования мой код работал как шарм. Одно замечание, не забудьте передать обратно и конфигурацию в запросе, и ответ в ответе, чтобы ваши запросы по-прежнему работали, как ожидалось.

Вы не можете быть уверены в наличии значения, если оно заполнено после выполнения обещания. Вы не получите правильное значение $rootScope.logStatus потому что его заселено только после $http.get вызов завершен, что может произойти после того, как ваш заводской код завершил выполнение

Другие вопросы по тегам