在 运行 中的 $http 请求之前工厂触发
Factory firing before $http request in run
如何让 authCheck 工厂在 "Check Login state of user" 函数之前触发?
我正在尝试检查 $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 元素转换为常量,但同样的问题又出现了。 运行 函数之前的工厂 运行s,因此常量直到工厂 运行s 之后才会更新。
如果在解决承诺后填充值,则无法确定该值是否存在。您不会获得 $rootScope.logStatus
的正确值,因为它仅在 $http.get
调用完成后填充,这可能发生在您的工厂代码完成执行后
非常感谢 Aditya。解决方案是我的拦截器函数格式不正确。重新格式化我的代码后就像一个魅力。请注意,不要忘记同时传回请求中的配置和响应中的响应,以便您的请求仍然按预期运行。
如何让 authCheck 工厂在 "Check Login state of user" 函数之前触发?
我正在尝试检查 $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 元素转换为常量,但同样的问题又出现了。 运行 函数之前的工厂 运行s,因此常量直到工厂 运行s 之后才会更新。
如果在解决承诺后填充值,则无法确定该值是否存在。您不会获得 $rootScope.logStatus
的正确值,因为它仅在 $http.get
调用完成后填充,这可能发生在您的工厂代码完成执行后
非常感谢 Aditya。解决方案是我的拦截器函数格式不正确。重新格式化我的代码后就像一个魅力。请注意,不要忘记同时传回请求中的配置和响应中的响应,以便您的请求仍然按预期运行。