ユーザーは、ユーザー名、電子メール、およびパスワードで登録します。メールで FirebaseSimpleLogin を使用して認証し、ユーザー ID を取得してから、ユーザー ID を使用してユーザーを読み込みます。
var ref = new Firebase(FIREBASE_URL + 'users'); // data containing user information
var users = $firebase(ref);
$rootScope.$on('$firebaseSimpleLogin:login', function (e, authUser) { // wait until authenticated
var query = $firebase(ref.startAt(authUser.uid).endAt(authUser.uid)); // find user by uid
query.$on('loaded', function () {
setCurrentUser(query.$getIndex()[0]); // get username from query
});
});
function setCurrentUser (username) {
$rootScope.currentUser = User.findByUsername(username);
}
さて、私の問題は、HomeCtrl にログインしている場合にユーザー プロファイル ページにリダイレクトしたいということです。
app.controller('HomeCtrl', function ($rootScope, $scope, $location, Auth, User) {
// wait for current user to be set
// if signed in
// location.path('/user/' + currentUser.username);
});
残念ながら、リダイレクトする前に setCurrentUser 関数が完了するまで待つ方法がわかりません。この他の関数が完了するまでコントローラーの関数を待機させる方法はありますか?
回避策はありますが、これは正しい方法ではないと確信しています。現在、ユーザー変数が更新されるのを監視し、次のように、ユーザーに変更された後にすべての関数を呼び出しています。
$scope.$watch(
function() { return $rootScope.currentUser }, // watch for variable to change
function() {
if ($rootScope.currentUser) { // if the current user is defined, change path
$location.path('/users/' + $rootScope.currentUser.username);
}
}
)