标签: angularfire

AngularFire2 Child_added事件再次返回所有数据

angularfire中child_added的angularfire中的child_added事件是不同的?

为什么angularfire返回所有列表包括child_added之后的值,而在firebase中它只返回la

 this.userList = this.room.getAllUser();
    this.userList.snapshotChanges()
      .subscribe(actions => {
         console.log(actions);
        actions.forEach(action => {
          console.log(action.type);
          console.log(action.key);
          console.log(action.payload.val());
        })
Run Code Online (Sandbox Code Playgroud)

我是否需要再次扫描响应并比较数组中的密钥?推之前呢?

firebase angularfire angular

7
推荐指数
0
解决办法
274
查看次数

如何修复错误:未处理的承诺拒绝:this._next 不是函数;区域: <root> ; 任务:ServiceWorkerContainer.addEventListener:message

当我在前台收到 firebase 推送通知时会发生此错误。请注意,推送通知在后台运行良好(即当浏览器最小化或关闭时)。我已经安装了最新版本的@angular/fire@6.0.0 和 firebase@7.13.2。我不确定这是 firebase 还是 @angular/fire 的问题,还是我需要向 plyfills.ts 添加一些代码

接收通知的方法


receiveMessage() {
    this.ngFireMessaging.messages.subscribe(
      (message: any) => {
        console.log(message);
        this.currentMessage$.next(message);
      });
  }

Run Code Online (Sandbox Code Playgroud)

Angular CLI 版本

Angular CLI: 9.1.0
Node: 12.16.0
OS: win32 x64

Angular: 9.1.0
... animations, cli, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router, service-worker
Ivy Workspace: Yes

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.900.7
@angular-devkit/build-angular     0.901.0
@angular-devkit/build-optimizer   0.901.0
@angular-devkit/build-webpack     0.901.0
@angular-devkit/core              9.1.0
@angular-devkit/schematics        9.1.0
@angular/cdk                      9.2.0
@angular/fire                     6.0.0
@angular/material                 9.2.0
@ngtools/webpack                  9.1.0
@schematics/angular               9.1.0
@schematics/update …
Run Code Online (Sandbox Code Playgroud)

polyfills firebase angularfire firebase-cloud-messaging angular9

7
推荐指数
1
解决办法
2093
查看次数

无法捕获 AngularFireAuth 中的异常

我尝试使用 AngularFireAuth.createUserWithEmailAndPassword 捕获异常并向用户显示存在的用户名/密码错误消息。异常处理代码运行,但不知何故,类似的异常仍然冒泡到全局错误处理程序。

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

@Component({
  selector: 'register',
  templateUrl: './register.component.html',
  styleUrls: ['./register.component.scss']
})
export class RegisterComponent {
  constructor(
    private af: AngularFireAuth,
  ) {}

  async onRegisterUsingEmailAndPassword(event) {
    const { email, password } = event;
    try {
      await this.af.createUserWithEmailAndPassword(email, password);
    } catch(error) {
      console.log(error); // <-- this code runs and logs {code: "auth/email-already-in-use", ...}
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

直接使用 firebase.auth 按预期工作:异常代码处理程序运行并且没有异常冒泡到全局错误处理程序。

import { Component } from '@angular/core';
import firebase from 'firebase/app';

@Component({
  selector: 'register',
  templateUrl: …
Run Code Online (Sandbox Code Playgroud)

firebase angularfire firebase-authentication angular

7
推荐指数
1
解决办法
521
查看次数

Firestore集合组查询文档ID

我正在尝试运行以下查询:

this.db.firestore
        .collectionGroup('members')
        .orderBy('dateModified', 'desc')
        .where(firebase.firestore.FieldPath.documentId(), '==', uid)
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

无效查询。通过 FieldPath.documentId() 查询集合组时,提供的值必须产生有效的文档路径,但“X6yL5Ko55jSMWhhoQUO91xVYdEH3”不是,因为它具有奇数个段 (1)。

解决此问题的唯一方法是将文档 ID 添加到文档中吗?这并不理想,因为我有很多现有数据...文档 id 是 firebase 用户的 uid。

firebase angularfire google-cloud-firestore

6
推荐指数
2
解决办法
5141
查看次数

模块“@angular/fire/firestore”没有导出成员“AngularFirestoreModule”

从 '@angular/fire/firestore' 导入 { AngularFirestoreModule } ;// => 错误

模块“@angular/fire/firestore”没有导出成员“AngularFirestoreModule”

包.json

“@角/火”:“^7.0.4”,

firebase angularfire angular

6
推荐指数
1
解决办法
8144
查看次数

如何让 Firebase 身份验证 OAuthProvider 使用 OIDC 提供程序添加其他范围

我已将自定义 OIDC 提供商添加到我的 Google Identity Platform。我可以成功地通过它进行身份验证,所以我知道这不是提供程序配置的问题,但由于某种原因,当我尝试向令牌请求添加其他范围时,新范围不会出现在请求 url 中。在下面的代码块中,我看到 OAuthProvider 对象显示了我在请求 signInWithPopup 之前添加的其他范围。但在此请求之后,当我验证收到的令牌时,它仅具有“oidc”范围,并且其他范围不会出现在弹出窗口的 URL 中。我是否缺少一些额外的步骤,或者其他范围是否不适用于 Firebase Auth 中的自定义 OIDC 提供商?

    let twitch = new firebase.auth.OAuthProvider('oidc.twitch');
    twitch.addScope('moderation:read');
    twitch.addScope('user:edit');
    console.log(twitch); // This shows the additional scopes requested
    const user = await this.auth.signInWithPopup(twitch); // This URL only shows the oidc scope
    console.log(user); // This user token does not have any additional scopes
Run Code Online (Sandbox Code Playgroud)

在我必须进行自己的身份验证之前,我们将不胜感激任何帮助或确认。谢谢,

firebase angularfire openid-connect firebase-authentication google-identity

6
推荐指数
1
解决办法
1634
查看次数

AngularFire getIdToken(true) 不刷新令牌

我有一个 AngularFire 身份验证服务,它工作得非常好 - 除了它不会刷新令牌。

我的刷新代码:

firebase.auth().currentUser.getIdToken(true).then((token: string) => {
    const newUser = { token: token }; // new user details in brief
    this.user.next(newUser);
});
Run Code Online (Sandbox Code Playgroud)

调用 firebase 服务很好并给出响应,但它只返回当前令牌并且不会刷新令牌 - 因此它仍然在 1 小时后退出应用程序。

我已经阅读了大量有关 getIdToken 的问题,但没有一个专门解决不刷新的令牌。

我做了一个 stackblitz:https://stackblitz.com/edit/angular-ivy-uvcdz7 ?file=src/app/app.component.ts 这样你就可以看到完整的代码(尽管由于某种原因它不起作用,但也是因为我无法弄清楚如何通过 SB 将项目连接到 firebase)

编辑

为了帮助还有一些我不期望的其他奇怪行为,例如在我的 ngOnInit 中我有......

this.fAuth.onAuthStateChanged((state) => {
    console.log(state);
})
Run Code Online (Sandbox Code Playgroud)

当我登录或退出时,它不执行任何操作 - 没有消息表明状态已更改。当身份验证发生变化时,我期望触发的这些功能似乎都没有做任何事情。

编辑2

作为补充信息,在添加赏金之前,我对 Angular 和 AngularFire 进行了全面而痛苦的更新,所以现在 Angular 是 v13,AngularFire 是 7.2.0,看看这是否会产生任何影响,但它没有,getIdToken 仍然提供没有刷新令牌。

编辑3

所以这个函数作为答案提供如下:

public getToken$(): Observable<firebase.auth.IdTokenResult> {
    return from(this.fAuth.currentUser).pipe(switchMap(user => {
        return from(user.getIdTokenResult(true)).pipe(map(token => …
Run Code Online (Sandbox Code Playgroud)

javascript angularfire firebase-authentication angular

6
推荐指数
1
解决办法
1615
查看次数

我需要什么规则才能允许访问 Firestore 中的用户数据?

我正在学习 Firestore 并构建了一个有角度的应用程序。我正在使用 Firebase 身份验证,但无法确定用于允许用户访问其数据的规则。例如,一个产品集合,每个产品都有一个 userId,实际上是他们的电子邮件地址。

例子: 在此输入图像描述

我当前的规则如下,但不起作用(我已经尝试了基于文档、stackoverflow 等所能想到的一切):

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userEmail} {
        allow read, write: if request.auth != null;
    }
    match /products/{userId}{
        allow read, write: if request.auth.uid.userEmail == userId
    }  
  }
}
Run Code Online (Sandbox Code Playgroud)

我所做的唯一有效的事情(即我拿回所有产品)是如果我进行 match/{document=**) ,它将它向任何不是我想要的人开放。:)

有任何想法吗?

编辑:以防有人想知道角度代码。再说一次,如果我设置规则允许任何我做的事情取回数据。如果我限制它,到目前为止我什么也得不到。所以,我知道代码有效(getAll),因此一定是规则不正确。

编辑:我更新了代码,以便在从商店请求所有产品数据之前将用户电子邮件写入控制台。它成功输出了用户的电子邮件。

import { Injectable } from '@angular/core';
import { AngularFirestore, AngularFirestoreCollection } from '@angular/fire/firestore';
import { AngularFireAuth } from '@angular/fire/auth';
import { Product } from '../models/product.model';

@Injectable({
  providedIn: 'root'
})
export class ProductsService { …
Run Code Online (Sandbox Code Playgroud)

javascript firebase-security angularfire firebase-authentication google-cloud-firestore

6
推荐指数
1
解决办法
834
查看次数

使用 Angularfire 时如何使 Firebase App Check 工作?

我正在尝试让 Firebase App Check 工作,但我正在努力寻找一种使用 Angularfire 来实现这一点的方法,因为我能找到的似乎没有相关文档。

...
import { getFirestore, provideFirestore } from '@angular/fire/firestore';
import { AngularFireModule } from '@angular/fire/compat';
import { AngularFireStorageModule } from '@angular/fire/compat/storage';
import { initializeAppCheck, provideAppCheck, ReCaptchaV3Provider } from '@angular/fire/app-check';
import { FirebaseApps, getApp } from '@angular/fire/app';

@NgModule({
  ...
  imports: [
    ...
    AngularFireModule.initializeApp(environment.firebase),
    AngularFirestoreModule.enablePersistence(),
    AngularFireStorageModule,
    provideFirestore(() => getFirestore()),
    provideAppCheck(() => initializeAppCheck(getApp(), { provider: new ReCaptchaV3Provider(environment.recaptchaSiteKey), isTokenAutoRefreshEnabled: true })),
  ],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)

这样,当我运行应用程序时,我收到此错误:

NullInjectorError:R3InjectorError(AppModule)[AngularFireAuthGuard - > AngularFireAuth - > AppCheckInstances - > InjectionToken …

javascript firebase angularfire angular firebase-app-check

6
推荐指数
1
解决办法
940
查看次数

AngularFire FirebaseError:“未创建 Firebase 应用程序‘[DEFAULT]’ - 首先调用initializeApp()(应用程序/无应用程序)。”

我将 Node 模块rxfire从 6.0.3 更新到 6.0.4,firebase从 9.23.0 更新到 10.3.0。现在我的 Angular 应用程序无法启动。我运行npm install rxfire@6.0.3npm install firebase@9.23.0恢复到旧的 Node 模块,但错误仍然存​​在。我还删除了我的节点模块并运行了npm install.

错误是:

FirebaseError: Firebase: No Firebase App '[DEFAULT]' has been created - call initializeApp() first (app/no-app).
Run Code Online (Sandbox Code Playgroud)

StackOverflow 的多个页面回答了命名空间 Firebase 的这个问题,而不是模块化 Firebase 的问题。

这是我的app.module.ts文件:

FirebaseError: Firebase: No Firebase App '[DEFAULT]' has been created - call initializeApp() first (app/no-app).
Run Code Online (Sandbox Code Playgroud)

错误是说我需要把initializeApp(environment.firebase))一切放在第一位。它位于 的顶部imports

该错误还表明它正在尝试连接到名为 的 Firebase 应用程序[DEFAULT]。我的 Firebase 项目名为 …

firebase angularfire angular

6
推荐指数
1
解决办法
959
查看次数