Angularjsを使用する。 Firebase認証イベントが発生して現在のユーザを設定する前に、現在のユーザのuidを使用してコントローラがFirebaseを照会しようとすると、どのようにしてユーザがページを再読み込みする状況に対処しますか?Firebaseの非同期認証をページリロードしてユーザのuidが必要なリストを取得する
詳細: はFirebaseクエリが必要とユーザーのuidだとユーザーのためのコントローラのチェックをルートに移動したときにすべてのものは、$ state.go(「/リスト」)
経由で動作します。しかし、人がページをリロードするときこれは、このイベントハンドラが起動されるまで存在しません:
auth.onAuthStateChanged(function(user) {
if (user) {
//Set user
UserSrvc.currentUser = user;
} else {
$state.go('/login');
}
});
app.controller('ListCtrl', function($scope, UserSrvc, Posts) {
if (!UserSrvc.currentUser){
UserSrvc.getUser();
};
$scope.posts = Posts.list(); <--THIS GENERATES ERROR, SINCE NO USER YET
})
Firebaseはまだ私は、コントローラの先頭にチェックして通話を行うことができますので、これは問題ではないでしょう同期認証コールを持っていた場合。
だから、このような状況に対処するための最良の方法は何
- 。
- ユーザがログインしていない場合、Posts.list()を実行せずにUserSrvc.getUser()は$ state.go( '/ login')にどのように移動しますか?
ありがとうございますが、ユーザーが既にログインしてこのルートに移動した場合、どのようにPosts.list()が表示されますか。 auth状態が変更されないので、リストを実行してロードしますか? – neo
'onAuthStateChanged'は、ページをロードするときに現在の状態で起動します。 –
ああありがとう! Btw、あなたが言及したangularFire。私はそれを見て、それも$ getAuth()同期関数を持っていますが、それは非推奨と思われる?それともそれじゃないの?私は物事を行う "ウェブ"の方法を反映した新しい文書を見つけることができないようです。 – neo