Angular版本:15.2.9 AngularFire版本:7.5.0
下面是我的代码:
(app.module.ts)
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { LayoutModule } from '@angular/cdk/layout' ;
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { getApp, initializeApp, provideFirebaseApp } from '@angular/fire/app';
import { ReCaptchaV3Provider, initializeAppCheck, provideAppCheck } from '@angular/fire/app-check' ;
import { environment } from '../environments/environment';
import { provideAuth,getAuth, connectAuthEmulator } from '@angular/fire/auth';
import { provideFirestore,getFirestore, Firestore, initializeFirestore } from '@angular/fire/firestore';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AppRoutingModule,
provideFirebaseApp(() => initializeApp(environment.firebase)),
provideAppCheck( () => initializeAppCheck(undefined, {
provider: new ReCaptchaV3Provider(environment.recaptchaV3SiteKey),
isTokenAutoRefreshEnabled: true
})),
provideAuth(() => {
const auth = getAuth() ;
if (environment.useEmulators){
connectAuthEmulator(auth, 'http://localhost:9099', {
disableWarnings: true
}) ;
}
return auth ;
}),
provideFirestore(() => {
let firestore: Firestore ;
if (environment.useEmulators){
firestore = initializeFirestore(getApp(), {
experimentalForceLongPolling: true
}) ;
}
else{
firestore = getFirestore() ;
}
return firestore ;
}),
BrowserAnimationsModule,
LayoutModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
在我的登录组件中:
它给出了开发模式下的以下错误日志:
我在firebase的app-check控制台中添加了给定的调试令牌。403错误,响应如下:
{
"error": {
"code": 403,
"message": "Invalid API key for project ID: demo-project",
"status": "PERMISSION_DENIED"
}
}
当检查console.log(this.appcheck)
的结果时,它会将demo-project
作为我的projectId给予给我的应用程序凭据。但是当我为生产构建应用程序时,它会给我的Firebase项目ID不同的调试令牌和不同的403响应消息“应用程序证明失败”。
我已经查阅了很多关于stackoverflow的指南和其他问题,但仍然困惑于如何正确地设置本地和生产开发。
编辑1:新增生产模式截图。调试令牌是不同的,现在this.appcheck
提供正确的projectId而不是demo-project
时使用ng serve。
403响应截图
编辑2:在一些指南中设置firestore和auth模拟器时,他们告诉他们将projectId更改为demo-*
。所以,在我的开发环境中,我改回了我的项目ID。现在我要拿回应用检查令牌了在开发模式下,可以显示调试令牌,但在生产中,它仍然显示上述生产错误,带有不同的调试ID,证明失败。如何解决这个问题?
1条答案
按热度按时间sycxhyv71#
花了3天时间终于解决了这个问题。我检查了开发服务器源代码,并在app check init函数中检查全局值
FIREBASE_APPCHECK_DEBUG_TOKEN
是否为字符串或设置为true。然后它将显示带有调试令牌的日志,否则将生成新的日志。因此,答案是对于生产版本设置为false,对于开发版本设置为在firebase控制台中保存的调试令牌。
生产控制台日志:
此外,在选择禁用网络中的缓存选项卡并刷新生产页面后,生产上的403问题得到解决。我认为浏览器使用的是一个旧版本,我没有改变projectId,也没有将DEBUG TOKEN设置为false。