如何通过 Firebase 设置自定义身份验证声明并识别平台

tre*_*ens 6 node.js firebase-authentication google-cloud-functions firebase-admin

我按照此处的Firebase 文档为首次使用 Firebase 身份验证 + 识别平台登录我的应用程序的用户设置自定义身份验证声明,但它似乎不起作用。

当用户第一次登录时,我希望他们获得admin自定义声明。我创建了以下阻止函数,并从日志中验证了它在我第一次使用谷歌登录登录我的应用程序时运行:

exports.beforeCreate = functions.auth.user().beforeCreate((user, context) => {
  return {
    customClaims: {
      admin: true,
    },
  };
});
Run Code Online (Sandbox Code Playgroud)

我希望这会在用户的令牌中创建管理员自定义声明。但是,当我使用另一个云功能获取声明列表时,管理声明不会出现。

exports.getclaims = functions.https.onRequest(async (req, res) => {
  const uid = req.query.uid as string;
  if (uid) {
    const user = await admin.auth().getUser(uid);
    res.send(user.customClaims);
  } else {
    res.sendStatus(500);
  }
});
Run Code Online (Sandbox Code Playgroud)

如果我直接使用以下云函数使用管理 SDK 设置声明,则会出现管理声明。

exports.setclaim = functions.https.onRequest(async (req, res) => {
  const uid = req.query.uid as string;
  if (uid) {
    await admin.auth().setCustomUserClaims(uid, {admin: true});
    res.sendStatus(200);
  } else {
    res.sendStatus(500);
  }
});
Run Code Online (Sandbox Code Playgroud)

我在 beforeCreate 函数中做错了什么?

Gre*_*ash 1

GitHub 上有一个与此相关的开放问题。请参阅sessionClaims 内容未添加到解码的令牌中。此外,最近合并了一个关于此问题的修复程序。