【问题标题】:Firebase - setting custom user claims in admin is not working [duplicate]Firebase - 在管理员中设置自定义用户声明不起作用[重复]
【发布时间】:2020-06-29 02:56:23
【问题描述】:

我有一个 Firebase 云功能,可以对给定电子邮件中的 Firebase 用户设置自定义声明。

这是功能代码:

export const addAdmin = functions.https.onRequest(async (request, response) => {
  // Setting policies
  response.set("Access-Control-Allow-Origin", "*");
  response.set("Access-Control-Allow-Methods", "POST");
  response.set("Access-Control-Allow-Headers", "Content-Type");

  try {
    let details = JSON.parse(request.body);
    let user = await admin.auth().getUserByEmail(details.email);

    if (details.master !== "************") throw Error("Wrong Password");

    admin
      .auth()
      .setCustomUserClaims(user.uid, { admin: true })
      .then(() => {
        response.send(
          `User with uid ${user.uid} was set with claims - ${JSON.stringify(
            user.customClaims
          )}`
        );
      })
      .catch(error => {
        console.error(error);
        response.status(400).send(error);
      });
  } catch (error) {
    console.error(error);
    response.status(400).send(error);
  }
});

当我从客户端调用这个函数时,我得到了预期的结果:

uid JiT*******v0Pp7U2 的用户设置了声明 - {"admin":true}

但它似乎没有提出索赔。我在 Firestore 中设置的安全规则无法识别声明。

这是我的安全规则的配置方式:

allow read: if request.auth.uid == userId || request.auth.token.admin == true;

我什至尝试在客户端记录 token.claims 对象,但这也是未定义的

const token = await user?.getIdTokenResult();
console.log(token?.claims["admin"]);

这里出了什么问题?

【问题讨论】:

    标签: node.js firebase firebase-authentication firebase-admin


    【解决方案1】:

    仅刷新网页或重新运行查询不足以查看自定义声明的更改。为了让客户端应用程序中的用户看到对其自定义声明的更改,用户必须退出并重新登录,或者使用 user.getIdToken(true) 强制刷新其 ID 令牌。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-05
      • 2021-10-29
      • 2018-11-14
      • 2019-12-17
      • 2020-01-27
      • 2019-11-02
      • 1970-01-01
      相关资源
      最近更新 更多