Angularfire - 类型“User”上不存在属性“setCustomUserClaims”

问题描述 投票:0回答:1

我正在使用 Angular 17 和 AngularFire 17。我想设置自定义声明,以便我可以在身份验证中使用角色,但由于某种原因,User 对象似乎没有 setCustomUserClaims() 函数。用户对象似乎也不存在于“compat”版本中。我对 Firebase/AngularFire 非常陌生,可以使用一些帮助来理解我做错了什么。谢谢。

import { inject, Injectable } from '@angular/core';
import { Auth, authState, User, user } from '@angular/fire/auth';
import { Subscription } from 'rxjs';
import { AngularFireAuth } from '@angular/fire/compat/auth';
import { FirebaseService } from './firebase.service';
import { Role } from '../interfaces/role';

@Injectable({
  providedIn: 'root'
})
export class AuthService {
  private auth: Auth = inject(Auth);
  user$ = user(this.auth);
  authState$ = authState(this.auth);
  userSubscription: Subscription;

  constructor(private afAuth: AngularFireAuth, private firebaseService: FirebaseService) {
    this.userSubscription = this.user$.subscribe((aUser: User | null) => {
      //handle user state changes here. Note, that user will be null if there is no currently logged in user.
      if (aUser) {
        //user is logged in
        // set the admin role on the user
        aUser.setCustomUserClaims({ admin: true }).then(() => { }); // THIS LINE IS THE ERROR
      }
    })
  }
angular firebase firebase-authentication angularfire
1个回答
0
投票

用户无法在应用程序的前端设置自己的自定义声明。这是一个巨大的安全漏洞。自定义声明只能使用完全安全的后端代码来设置。否则,人们可以简单地授予自己访问他们想要的任何声明的权限。

事实上,这个功能

setCustomUserClaims
仅在Firebase Admin SDK中可用,该SDK专门供后端使用。您可能是从文档中的示例代码复制的。该代码仅适用于 Firebase Admin,不适用于任何客户端 SDK。

© www.soinside.com 2019 - 2024. All rights reserved.