更新所有用户 firebase 角度的特定字段

Posted

技术标签:

【中文标题】更新所有用户 firebase 角度的特定字段【英文标题】:Update specific field of all user firebase angular 【发布时间】:2021-12-01 12:47:45 【问题描述】:

由于我是 Angular 和 Ionic 的新手,我正在尝试更新用户的特定字段。我想显示来自 firebase 的所有数据并只更新一个字段。 我只能为一个登录的用户做,但不能为所有用户做。

export class AdminPage implements OnInit 
user:any;
userId:string;
enableAccess:boolean;
  constructor(
    private auth:AuthService, 
    private router:Router, 
    private afs:AngularFirestore,
    private loadingCtrl:LoadingController,
    private toastr:ToastController)  

  ngOnInit() 
    this.auth.getAllUser().subscribe(user=>
      this.user=user;
    )
    this.auth.user$.subscribe(user=>
      this.enableAccess=user.IsApproved;
    )
    
  
  async updateUserInfo()
    const loading=await this.loadingCtrl.create(
      message:'updating',
      spinner:'crescent',
      showBackdrop:true
    )
    loading.present()
    this.afs.collection('user').doc(this.userId).set(
      'IsApproved':this.user.enableAccess
    ,merge:true).then(()=>
      this.toast('update sucessful','success');
    ).catch(error=>
      loading.dismiss();
      this.toast(error.message,'danger');
    )
  
  async toast(message,status)
    const toast =await this.toastr.create(
      message:message,
      color: status,
      position: 'top',
      duration:2000
    );
  

组件

ion-content>
  <ion-card>
      <ion-item> 
        <ion-label position="floating">Email:</ion-label>
        <p></p>
      </ion-item>

      <ion-item>
        <ion-label position="floating">Enable Access:</ion-label>
        <ion-input
          required
          type="boolean"
          [(ngModel)]="enableAccess"
          name="enableAccess"
        ></ion-input>
      </ion-item>
      <ion-button
        type="submit"
        expand="block"
        shape="round"
        (click)="updateUserInfo()"
        >Update</ion-button
      >

  </ion-card>
</ion-content>

我想显示数据库中每个用户的电子邮件,并且我想允许管理员仅更新 enableAccess 字段。如何获取所有用户并更新字段?

【问题讨论】:

【参考方案1】:

听起来您正在尝试为现有用户回填一些数据。如果是这种情况,我建议使用一次性 node.js 脚本来执行此操作,而不是在客户端应用程序代码中。

在 node.js 中这看起来像:

const admin = require("firebase-admin");
admin.initializeApp(...);

const db = admin.firestore();
db.collection("user").get((snapshot) => 
  snapshot.forEach((doc) => 
    doc.ref.update( IsApproved: false );
  );
);

如果您坚持在客户端代码中执行此操作,则几乎相同。鉴于这不会立即影响 UI,我建议通过常规 SDK 在 javascript 中进行回填。

即使结果显示在 Angular UI 中,AngularFire 也是构建在 JavaScript SDK 之上的,因此它们可以完美地互操作。这意味着更新也将立即显示在 AngularFire 中,即使您通过(更简单的)JavaScript SDK 进行更新也是如此。

【讨论】:

以上是关于更新所有用户 firebase 角度的特定字段的主要内容,如果未能解决你的问题,请参考以下文章

使用 Firebase 更新文档字段时使用 Object.assign

有没有办法根据 firebase Auth 用户信息更新 firestore 文档字段?

如何在特定时间后更新firebase数据库中的值,比如10分钟后?

我使用firebase以角度创建应用程序,如何让每个用户拥有自己的任务表[关闭]

Firebase 查询(在 Swift 中)在应用的所有用户中查找特定值

Firebase存储安全规则为特定用户提供访问权限