我的 oauth 设置有问题,当我注销时出现这种情况:
@Effect()
logout: Observable<Action> = this.actions.ofType(UserActions.LOGOUT)
.switchMap(() => Observable.of(this.afAuth.auth.signOut()))
.map(() => new UserActions.GetUser())
.catch(err => Observable.of(new UserActions.AuthError({error: err.message})));
一切正常,正在调用 UserActions.GetUser()
。现在,如果我尝试使用此效果和此 firebase 身份验证功能登录:
@Effect()
googleLogin: Observable<Action> = this.actions.ofType(UserActions.GOOGLE_LOGIN)
.switchMap(() => Observable.fromPromise(this.loginWithGoogle()))
.map(() => new UserActions.GetUser())
.catch(err => Observable.of(new UserActions.AuthError({error: err.message})));
private loginWithGoogle() {
return this.afAuth.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider());
}
调用了新的UserActions.GetUser()
,在Redux DevTools中可以看到,但是实际效果并没有调用,我在里面放了很多console.log看看有没有我在函数中做错了什么,但它根本没有被调用,而且我在 GetUser
中有一个 catch
,但这也没有触发。
在这种情况下,firebase 是否存在问题,还是我愚蠢?
Action :
获取用户效果:
@Effect()
getUser: Observable<Action> = this.actions.ofType(UserActions.GET_USER)
.switchMap(() => {
console.log('test'); // <-- Not called
return this.afAuth.authState;
})
.map(()=> {
return new UserActions.Authenticated();
});
** 编辑 1
我有一个新的观察:当没有互联网连接时,firebase 从本地加载,它确实有效,不知何故与 firebase 数据库的连接出现问题
最佳答案
尝试使用这个:
@Effect()
googleLogin: Observable<Action> = this.actions.pipe(
ofType(UserActions.GOOGLE_LOGIN),
map(action => action.payload), // if there is no payload disregard this
exhaustMap((auth: any) => Observable.fromPromise(this.loginWithGoogle()
.pipe(
map(() => new UserActions.GetUser()),
catchError(err => Observable.of(new UserActions.AuthError({error: err.message})))
))
)
)
exhaustMap 和 switchMap 有一点不同。 如果你成功了,请告诉我。
关于调用了 Angular ngrx + Firebase OAuth 操作但没有效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50546327/