如何制作可以处理两种类型的用户创建的动态云功能,每种类型都具有 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()
,但如果需要,您可以使用可调用函数来传递。
我的问题是当前的 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()
,但如果需要,您可以使用可调用函数来传递。