如何制作可以处理两种类型的用户创建的动态云功能,每种类型都具有 doc 的不同属性集?

How to make dynamic cloud function that can handle 2 types of user creation each with doc's different set of attributes?

我的问题是当前的 firebase AUTH 对正在创建哪种类型的用户有点盲目,我想创建一个可以处理 2 种不同类型用户或至少禁用另一种类型的创建的云函数用户(这意味着如果用户不是管理员,那么它只会从前端创建,并且云功能不会 运行 只有当用户是管理员时)知道如何实现这种行为并使 .onCreate() 方法区分创建的两种不同类型的用户?

export const accountCreate = functions.auth.user().onCreate((user) => {
  const expiresIn = 60; // test 1h   //172800  === 48h
  const createdAt = admin.firestore.Timestamp.now().toDate();
  createdAt.setSeconds(createdAt.getSeconds() + expiresIn);

  const payload = {
    user: 'Admin', // later dynamic
    verifiedEmail: false,
    sharedId: user.uid,
    createdAt: admin.firestore.Timestamp.now(), //admin.firestore.FieldValue.serverTimestamp(),
    premiumUntill: admin.firestore.Timestamp.fromDate(createdAt), //.toMillis() + 86400000, // +24h days //
    clients: [],
    unit: '',
  };

  return db
    .collection('Data')
    .doc(user.uid)
    .set(payload)
    .catch((err: any) => {
      console.log(err);
    });
});

.onCreate() 将为在 Firebase Auth 中创建的每个用户触发该功能,并且无法有条件地触发它。如果您不想每次都触发该功能,那么您可以使用 callable function 代替。

const createUser = async () => {
  const { user } = await createUserWithEmailAndPassword(auth, email, password);
  
  if (userShouldBeAdmin()) {
    // call the cloud function to update document/custom claims
    const updateUserType = httpsCallable(functions, 'updateUserType');
    const res = await updateUserType({ ...data })
  }
}
export const updateUserType = functions.https.onCall((data, context) => {
  const { uid } = context.auth; 
  // When using onRequest() functions, you must manually verify user's ID Token

  // TODO: Check if user is meant to be public as per your logic
  // if yes, update relevant documents and claims
  // else return an error.

  return;
});

此外,您不能将任何自定义参数传递给 onCreate(),但如果需要,您可以使用可调用函数来传递。