如何在onCreate中创建自定义声明?

时间:2019-05-31 19:51:53

标签: typescript firebase google-cloud-functions

我正在使用Firebase和Firebase云功能。 使用auth创建用户时,我想根据其电子邮件设置自定义声明。我正在尝试使用functions.auth.user().onCreate(....)实现这一目标。

但是,当我尝试添加自定义声明时,在控制台中出现以下错误:There is no user record corresponding to the provided identifier

我在网上尝试了许多示例,例如Google's docs中的示例。 我还尝试过在添加自定义声明之前手动创建用户,如下所示:

await auth().createUser({...user});
export const signupProcess = functions.auth.user().onCreate(async (user) => {

    // Check if user meets role criteria.
    const admin = (user.email && admins.has(user.email)? true: false);
    const customClaims = { admin };
    // Set custom user claims on this newly created user.
    return auth().setCustomUserClaims(user.uid, customClaims)
        .catch(error => {
            console.log(error);
        });
}); 

我希望可以使用正确的电子邮件访问管理员。 但是,我在创建用户时遇到了所描述的错误。

1 个答案:

答案 0 :(得分:1)

我尝试了简单的代码。

我可以设置自定义用户声明。

import * as functions from "firebase-functions";
import * as admin from "firebase-admin";

admin.initializeApp();

export const setCustomUserClaimsAdmin = functions.auth.user().onCreate(
  async (user: functions.auth.UserRecord): Promise<any> => {
    try {
      return admin.auth().setCustomUserClaims(user.uid, {
        ...user.customClaims,
        ...{ admin: true }
      });
    } catch (e) {
      console.error(e);
      return Promise.reject(e);
    }
  }
);

请参见https://github.com/zkohi/firebase-web-samples/tree/microsoft-oauth/functions

您可以尝试简单的代码还是更多地插入调试代码?