Firebase - 在管理员中设置自定义用户声明不起作用
Firebase - setting custom user claims in admin is not working
我有一个 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);
}
});
当我从客户端调用这个函数时,我得到了预期的结果:
User with uid JiT*******v0Pp7U2 was set with claims - {"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"]);
这里出了什么问题?
仅刷新网页或重新运行 查询不足以查看自定义声明的更改。为了让客户端应用程序中的用户看到对其自定义声明的更改,用户必须退出并重新登录,或者使用 user.getIdToken(true)
.
强制刷新他们的 ID 令牌
我有一个 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);
}
});
当我从客户端调用这个函数时,我得到了预期的结果:
User with uid JiT*******v0Pp7U2 was set with claims - {"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"]);
这里出了什么问题?
仅刷新网页或重新运行 查询不足以查看自定义声明的更改。为了让客户端应用程序中的用户看到对其自定义声明的更改,用户必须退出并重新登录,或者使用 user.getIdToken(true)
.