加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

已调用Angular ngrx Firebase OAuth操作,但效果不是

发布时间:2020-12-17 18:06:56 所属栏目:安全 来源:网络整理
导读:当我使用此效果注销时,我的oauth设置存在问题: @Effect() logout: ObservableAction = this.actions.ofType(UserActions.LOGOUT) .switchMap(() = Observable.of(this.afAuth.auth.signOut())) .map(() = new UserActions.GetUser()) .catch(err = Observab
当我使用此效果注销时,我的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 auth函数登录:

@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中有一个捕获,但这也没有触发.

在这种情况下是否存在firebase的问题或者我是愚蠢的?

操作:

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之间有一点区别.如果你成功的话,请告诉我.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读