You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularFire Auth持久化调用报错BrowserLocalPersistence需new调用如何解决?

问题原因

AngularFire 7 对接 Firebase 9 模块化 SDK 时做了封装调整,其中browserLocalPersistence为构造类,而非 Firebase 官方通用 Web 文档中给出的预实例化常量,直接传入未实例化的类就会触发该调用错误。

修复方案

方案1:修改当前setPersistence调用参数

直接给browserLocalPersistence加上实例化语法即可,修改后代码如下:

// 注意从@angular/fire/auth导入相关依赖
import { GoogleAuthProvider, setPersistence, signInWithPopup, browserLocalPersistence } from '@angular/fire/auth';

constructor(private auth: Auth, private router: Router) {
  if (auth.currentUser) this.router.navigate(this.redirect);
}

async loginWithGoogle() {
  const provider = new GoogleAuthProvider();
  try {
    // 仅修改这一行,给browserLocalPersistence加new实例化
    await setPersistence(this.auth, new browserLocalPersistence());
    await signInWithPopup(this.auth, provider);
    this.message = 'Sign in successful';
    await this.router.navigate(this.redirect);
  } catch (error: any) {
    console.error(error);
    if (error.code) {
      this.message = `${error.code}: ${error.message}`;
    } else {
      this.message = 'There was a problem signing in. Please try again.';
    }
  }
}

方案2:全局配置持久化(更推荐)

无需每次调用登录接口时手动设置持久化,直接在根模块导入provideAuth时配置即可,配置完成后可以删除loginWithGoogle方法中的setPersistence调用逻辑:

// app.module.ts 对应配置
import { NgModule } from '@angular/core';
import { provideAuth, getAuth, browserLocalPersistence } from '@angular/fire/auth';

@NgModule({
  imports: [
    // 其余导入保持不变
    provideAuth(() => {
      const auth = getAuth();
      auth.setPersistence(new browserLocalPersistence());
      return auth;
    }),
  ]
})
export class AppModule { }

内容的提问来源于stack exchange,提问作者Harry Allen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:36:01