如果他们尝试在应用程序中访问登录页面,我目前正在尝试将登录用户重定向到登录页面之外。与登录页面关联的控制器 -Login_controller
调用授权服务中的函数 - Authorisation_service.isLoggedIn()
。如果此服务返回 true,则应将用户重定向到已登录的概览页面。
通过登录控制台,我可以看到在服务返回 true 之前,条件语句已经声明了服务返回的值是未定义的。之后服务确实返回 true,但为时已晚。
如何让控制器的条件语句等待服务的返回值?
授权服务.js
myApp.factory('Authorise', ['User', '$http', '$location', '$rootScope', function( User, $http, $location, $rootScope ) {
return {
isLoggedIn: function() {
if( ((sessionStorage.username && sessionStorage.authKey) && (sessionStorage.username !== "null" && sessionStorage.authKey !== "null")) || ((localStorage.username && localStorage.authKey) && (localStorage.username !== "null" && localStorage.authKey !== "null" )) ) {
if( sessionStorage.username ) {
var usernameLocal = sessionStorage.username;
var authKeyLocal = sessionStorage.authKey;
} else {
var usernameLocal = localStorage.username;
var authKeyLocal = localStorage.authKey;
}
//pass to server
var user = User.query({ usernameLocal: usernameLocal, authKeyLocal: authKeyLocal }, function(user) {
if( user.loginSuccess === 1 ) {
return true;
} else {
return false;
}
});
} else {
return false;
}
}
};
}]);
登录控制器.js
myApp.controller( 'Login_controller', function( Authorise, $scope, $location ) {
if( Authorise.isLoggedIn() === true ) {
console.log("Authorise.isLoggedIn() = true");
$location.path('/teach/overview');
}
});