【问题标题】:can't sign out firebase user无法退出 firebase 用户
【发布时间】:2022-01-02 17:48:39
【问题描述】:

我正在尝试在我的 Angular 应用中退出当前登录的用户。这是我的客户服务:

  export class AuthClientService {
      public register(email: string, password: string): Observable<Object> {
        return from(
          createUserWithEmailAndPassword(this.firebaseService.auth, email, password)
        );
      }
    
      public logIn(email: string, password: string): Observable<Object> {
        return from(
          signInWithEmailAndPassword(this.firebaseService.auth, email, password)
        );
      }
    
      public logOut(): Observable<void> {
        return from(signOut(this.firebaseService.auth));
      }
    constructor(private firebaseService: FirebaseService) {}
   }

和 firebase 服务:

@Injectable({
  providedIn: 'root',
})
export class FirebaseService {
  public app = initializeApp(firebaseConfig);
  public auth = getAuth();
}

但是当我调用 logOut 函数时会出现这个错误:

ERROR 错误:未捕获(承诺中):TypeError:无法分配给 对象“[object Object]”的只读属性“currentUser” TypeError:无法分配给对象“[object Object]”的只读属性“currentUser” 在 index-8593558d.js:2473 在 Generator.next () 在 asyncGeneratorStep (asyncToGenerator.js:3) 在 _next (asyncToGenerator.js:25) 在 asyncToGenerator.js:32 在新的 ZoneAwarePromise (zone.js:1387) 在 asyncToGenerator.js:21 在 AuthImpl.directlySetCurrentUser (index-8593558d.js:2466) 在 index-8593558d.js:2329 在 Generator.next () 在 resolvePromise (zone.js:1213) 在 zone.js:1120 在 zone.js:1136 在 ZoneDelegate.invoke (zone.js:372) 在 Object.onInvoke (core.js:28692) 在 ZoneDelegate.invoke (zone.js:371) 在 Zone.run (zone.js:134) 在 zone.js:1276 在 ZoneDelegate.invokeTask (zone.js:406) 在 Object.onInvokeTask (core.js:28679)

app 正在从ngrx 效果调用它,但我认为这不是问题,因为我尝试在没有ngrx 的情况下调用它,但仍然出现此错误。

【问题讨论】:

    标签: javascript angular firebase-authentication


    【解决方案1】:

    所以经过一番调查,我找到了解决方案,我不确定这个问题的原因,但这可能对某人有帮助。首先,我将用户身份验证逻辑从 ngrx 效果移动到 Angular fire 身份验证观察器,如下所示:

      public authObserver(): void {
        this.angularFireAuth.user.subscribe((user) => {
          if (user) {
            this.store.dispatch(readCredentials({ userCredential: user }));
            this.router.navigate(['/dashboard']);
          }
        });
      }
    

    之后我意识到错误的原因是将用户对象传递给 ngrx 操作函数。当我创建对象用户的深层副本并将其传递给这样的功能时,它工作正常。

      public authObserver(): void {
        this.angularFireAuth.user.subscribe((user) => {
          if (user) {
            let copy = JSON.parse(JSON.stringify(user));
            this.store.dispatch(readCredentials({ userCredential: copy }));
            this.router.navigate(['/dashboard']);
          }
        });
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-30
      • 2016-11-06
      • 2018-07-02
      • 2018-07-24
      • 2020-09-10
      • 2016-07-22
      • 1970-01-01
      • 2017-08-08
      相关资源
      最近更新 更多