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

Angular 17 + @angular/fire 17.0.0使用signInWithCustomToken报错求助

解决Angular中Firebase自定义令牌登录的错误

问题原因

你直接调用了@angular/fire/auth中的signInWithCustomToken和getAuth函数,但在Angular独立应用模式下,需要通过依赖注入AngularFireAuth服务完成认证操作,而非直接调用底层函数,这导致AngularFire上下文未被正确识别,触发了错误。

解决方案

1. 修改服务文件,依赖注入AngularFireAuth

将服务中的直接调用改为注入AngularFireAuth实例,通过实例调用认证方法:

import { Injectable } from '@angular/core';
import { AngularFireAuth } from '@angular/fire/auth';
import { from } from 'rxjs';

@Injectable({ providedIn: 'root' })
export class AuthService {
  constructor(private afAuth: AngularFireAuth) {}

  async signInWithCustomToken() {
    const token = await this.getToken(); // 你的令牌获取逻辑
    return from(this.afAuth.signInWithCustomToken(token));
  }

  private async getToken() {
    // 调用Firebase函数获取自定义令牌的逻辑
    const response = await fetch('你的Firebase函数接口地址');
    const data = await response.json();
    return data.customToken;
  }
}

2. 验证app.config.ts的Firebase配置

现有配置基本正确,确保provideAuth已正确添加到提供者列表中:

// app.config.ts
export const appConfig: ApplicationConfig = {
  providers: [
    provideRouter(routes),
    provideClientHydration(),
    importProvidersFrom(
      provideFirebaseApp(() => initializeApp(firebaseConfig)),
      provideFirestore(() => getFirestore()),
      provideStorage(() => getStorage()),
      provideAuth(() => getAuth()) // 确认该行存在
    ),
    provideAnimations(),
    provideHttpClient(),
    DatePipe
  ],
};

3. 确保在Angular上下文内调用方法

认证方法必须在Angular注入的服务或组件中执行,不能在Angular上下文外(比如全局函数、非注入类)调用,否则会再次触发上下文缺失的错误。

关键说明

@angular/fire的认证方法依赖Angular的依赖注入上下文,使用AngularFireAuth服务而非直接调用firebase/auth的原生函数,能确保AngularFire的配置被正确识别,避免出现模块未提供的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:50:04