firebase と angularjs をいじって、ちょっとしたことをまとめてみました。サインインボタンのクリックで呼び出されるこの関数を使用して、コントローラーで認証が機能するようになりました。
$scope.signin = function(){
var user1 = $scope.cred.user;
var pass1 = $scope.cred.password;
var ref = new Firebase("https://kingpinapp.firebaseio.com");
var auth = new FirebaseAuthClient(ref, function(error, user) {
if (user) {
// user authenticated with Firebase
console.log(user);
} else if (error) {
// an error occurred authenticating the user
console.log(error);
} else {
// user is logged out
}
});
auth.login('password', {
email: user1,
password: pass1,
rememberMe: false
});
console.log("tracer");
}
今、これは素晴らしく、うまく機能します。しかし、非同期で動作しているようです。たとえば、auth.login のユーザー オブジェクトの前に console.log("tracer") が返されます。これを行うには、おそらく約束を扱う必要があることを知っており、次のことを試しました。
var defer = $q.defer();
defer.auth
.then(function() {
auth.login('password', {
email: user1,
password: pass1,
rememberMe: false
});
})
.then(function() {
console.log("tracer");
})
しかし、コントローラーモジュールで宣言した後、 $q is not defined を受け取りました。だから私がやろうとしていることは
- ユーザーがログインしているかどうかを確認します。
- はい/いいえを受け取るまで待ちます
- ログインしていない場合は、auth.login を使用します
- 他のユーザー ログインしているユーザーは、他のことを行います
auth.login 関数を変数 auth の else に入れることを考えましたが、うまくいかないようです。これを機能させる方法を理解する上で、適切なロジックを理解しようとしています。