現在、ログインしているユーザーがアプリでログイン ページにアクセスしようとすると、ログイン ページからリダイレクトしようとしています。ログイン ページに関連付けられたコントローラ -Login_controller
認可サービスの関数を呼び出します - Authorisation_service.isLoggedIn()
。このサービスが true を返す場合、ユーザーはログインした概要ページにリダイレクトされます。
コンソールにログを記録すると、サービスが true を返す前に、サービスから返された値が未定義であることが条件文で既に宣言されていることがわかります。その後、サービスは true を返しますが、手遅れです。
コントローラーの条件ステートメントがサービスからの戻り値を待機するようにするにはどうすればよいですか?
Authorise_service.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;
}
}
};
}]);
Login_controller.js
myApp.controller( 'Login_controller', function( Authorise, $scope, $location ) {
if( Authorise.isLoggedIn() === true ) {
console.log("Authorise.isLoggedIn() = true");
$location.path('/teach/overview');
}
});