【发布时间】:2018-11-05 20:44:36
【问题描述】:
当我以这种效果注销时,我的 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 有问题还是我很愚蠢?
动作:
获取用户效果:
@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 数据库的连接存在问题
【问题讨论】:
-
您能否将运行测试场景时的调度操作日志添加到您的问题中?
-
@ibenjelloun 已添加
-
您想要捕获的“获取用户”操作是否具有某种效果?
-
@ibenjelloun “获取用户”操作是使用从 firebase 提供的数据从我的数据库加载用户的操作。但是这个动作的效果是不会调用的。只有具有默认值的操作
-
你能分享一下“获取用户”操作被调度时应该调用的效果代码吗?
标签: angular firebase-authentication observable ngrx ngrx-effects