在 ReactJS 中使用 createUserWithEmailAndPassword firebase auth 创建用户时如何区分管理员和客户角色

How to distinguish admin and customer role when create user with createUserWithEmailAndPassword firebase auth in ReactJS

我有两个 reactjs 网站,一个用于客户端用户,一个用于管理员。我有 graphql api 用于数据访问。目前admin使用的是JWT,我们将改为firebase认证。

我已经使用 firebase 包实现了登录和注册。

这里是创建用户函数。所以它工作并且可以成功登录。但我的问题是如何区分管理员用户和客户用户。我看到 setCustomUserClaims 仅适用于 firebase-admin。请问如何在firebase中设置role,正确的设置方法是什么?

function register(name, email, password) {
return createUserWithEmailAndPassword(auth, email, password).then((res) => {
  const auth = getAuth();
  
  updateProfile(auth.currentUser, {
    displayName: name
  }).then(() => {
    // Profile updated!
    // ...
  }).catch((error) => {
    // An error occurred
    // ...
    console.log(error.message);
  });
});

}

Custom claims are definitely the easiest way to add roles in Firebase Auth but you'll need to use Admin SDK in a Cloud function 或任何安全的服务器环境。

I saw that setCustomUserClaims is only for firebase-admin

setCustomUserClaims() 用于设置 自定义声明,但您始终可以使用客户端 SDK 中的 getIdTokenResult() 函数读取它们。

const { claims } = await getIdTokenResult(auth.currentUser)

因此,如果您的 GraphQL API 在您自己的服务器上运行,您可以在那里安装 Firebase Admin 并向 Firebase 身份验证用户添加自定义声明。

或者,您可以将用户角色存储在 Firestore 之类的数据库或您自己的数据库中,然后从那里读取用户角色。数据库中存储角色的一个问题是,如果需要,您无法从其他服务(如 Firebase 存储)的安全规则访问它们,但自定义声明可以。