アプリケーションで認証を処理するためにfirebaseを使用しています。Firebase には、認証ステータスが変化するたびにコールバックを実行するリスナーがあります。私はそれをfirebase utilsファイルに持っています:
export default {
...
authChanged: (callback) =>{
return firebaseAuth.onAuthStateChanged(callback);
},
...
}
ユーザーがログイン/ログアウトすると、コールバックが実行されます。このオブザーバーを redux-saga で処理しようとしていて、firebase がステータスの変更を通知するたびにイベントをレデューサーに送信します。私が直面している問題は、そのオブザーバーの動的な戻り値を囲い込む方法を判断できないことです。今、私はこれをやっています:
export function* loginState(){
Firebaseutils.authChanged(function(user){
if(user){
yield put({type: 'LOGGED_IN', user: {user.email, user.uid}})
}else{
yield put({type: 'LOGGED_OUT'})
}
});
}
if/else 条件が機能することを確認しました (ステータスが変更されたときにコンソールにログを記録するだけです) が、yield を使用しようとするとエラーが発生します。それはバグであるか、明確でないルールに違反しています。これを設定する他の方法はありますか?ベスト プラクティスの観点からは、これは redux-saga で処理する必要があるようです。