我正在使用 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
}
})
}
用户无法在应用程序的前端设置自己的自定义声明。这是一个巨大的安全漏洞。自定义声明只能使用完全安全的后端代码来设置。否则,人们可以简单地授予自己访问他们想要的任何声明的权限。
事实上,这个功能
setCustomUserClaims
仅在Firebase Admin SDK中可用,该SDK专门供后端使用。您可能是从文档中的示例代码复制的。该代码仅适用于 Firebase Admin,不适用于任何客户端 SDK。