调用了 Angular ngrx + Firebase OAuth 操作但没有效果

标签 angular firebase-authentication observable ngrx ngrx-effects

我的 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 :

Dispatched Actions

获取用户效果:

@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/

相关文章:

c# - 如何将字符串传递给 Angular 中的发布请求?

android - 如何解决 Unable to find explicit activity in firebase AuthUi?

android - RxJava Kotlin 如何从单个 observable<String> 中获取分离的对象

javascript - RxJS - 为什么我要使用 throwError 而不是简单地抛出错误?

javascript - Angular 2 - 属性指令语法错误..我错过了什么吗?

angular - 导入导出核心模块和共享模块

css - IONIC Card 布局样式似乎不居中且间距不等

javascript - 如何在 Jest 中进行单元测试并检查函数是否正在调用预期的 firebase 方法?

firebase - AngularFire2 支持更新用户凭据吗?

angular - 如何使用 Observable 调用等待事件订阅者完成