如何根据用户注册位置设置不同的自定义声明?

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

我有 2 个注册页面,一个用于学生,一个用于教师。 当他们注册时,我如何为每个人设置不同的自定义声明? (学生:正确或老师:正确)

我猜这可能在 .onCreate 上实现?我只能为每个 onCreate 函数设置一个自定义声明,如何使其动态化?

exports.AddTeacherRole = functions.auth.user().onCreate(async (authUser) => {
if (authUser.email) {
  const customClaims = {
    teacher: true,
  };
firebase authentication google-cloud-platform google-cloud-firestore
1个回答
2
投票

传递给 Authentication Cloud Functions 的

authUser
对象与 Firebase Admin SDK 返回的
UserRecord
的对象类型完全相同。

根据您创建用户的方式(例如,从前端,在 JavaScript 中使用

createUserWithEmailAndPassword()
,或者例如从 Admin SDK,使用
createUser()
),
UserRecord
可能会拥有或多或少的“额外”属性(例如
displayName
photoURL
等)。

问题在于,这个

UserRecord
实例没有可用于指示用户角色(学生或教师)的特定属性。因此,您无法在云函数中获取此信息,该信息是在创建用户时触发的。

一种常见的方法是将此类额外数据添加到与用户 ID 具有相同 ID 的 Firestore 文档(或实时数据库节点)中。然后从这个文档中,您可以触发一个更新用户记录的云函数。

另一种方法是使用云函数来完成所有工作:创建用户、设置自定义声明并创建 Firestore 文档。您将在以下文章中找到有关这种方法的一些详细解释。


回答您在已删除答案中提出的问题:

为了验证一下,可以通过创建 2 个单独的 https 来解决 可调用的云函数,用于处理每个角色的注册 例子?

是的,您可以有两个可调用的云函数,但我认为应该可以只拥有一个,并在调用此云函数时传递不同的参数值,具体取决于用户角色。

类似:

const setCustomClaim = firebase.functions().httpsCallable('setCustomClaim');

const userRole = "student" // or role = "teacher"
 
setCustomClaim({role: userRole, userId, bar: "foo" }).then(function(result) {
  // Read result of the Cloud Function.
  // ...
}); 
© www.soinside.com 2019 - 2024. All rights reserved.