我正在为 firebase 自定义声明而苦苦挣扎。
我已经测试了很多方法都不起作用。显然,我错过了概念本身的一些重要内容。
所以我回到了根源。来自 google 示例的此脚本应该对新创建的用户应用海关规则
exports.processSignUp = functions.auth.user().onCreate(event => {
const user = event.data; // The Firebase user.
const customClaims = {
param: true,
accessLevel: 9
};
// Set custom user claims on this newly created user.
return admin.auth().setCustomUserClaims(user.uid, customClaims)
});
Run Code Online (Sandbox Code Playgroud)
然后在客户端上,我检查结果
firebase.auth().currentUser.getIdTokenResult()
.then((idTokenResult) => {
// Confirm the user is an Admin.
console.log(idTokenResult.claims)
if (!!idTokenResult.claims.param) {
// Show admin UI.
console.log("param")
} else {
// Show regular user UI.
console.log("no param")
}
})
.catch((error) => {
console.log(error); …
Run Code Online (Sandbox Code Playgroud) 我正在使用 angularfire2 使用 Angular6 应用程序。我在用户创建中将角色设置为自定义声明,但它似乎没有传播。
创建用户时,我将用户 ID、业务 ID 和角色发送到云功能:
出价 > 商业 ID
角色 > 角色
req.body.uid > 用户 ID
const customClaims = {
roles: { [bid]: urole }
}
admin.auth().setCustomUserClaims(req.body.uid, customClaims)
.then(result => {
res
.status(200)
.send()
})
Run Code Online (Sandbox Code Playgroud)
问题是当对云函数的调用完成时,我想将用户重定向到需要用户设置自定义声明的路由,但它失败了。经过一些调试,我发现如果运行:
this.angularFireAuth.auth.currentUser.getIdTokenResult(true).then(result => {
return result.claims.roles
})
Run Code Online (Sandbox Code Playgroud)
在调用云函数“result.claims.roles”之后立即未定义,但是如果我刷新页面,“result.claims.roles”就会有我之前设置的数据。
我已经尝试过 reload 方法和 getIdToken(true) 但我遇到了同样的问题。
有没有办法避免刷新页面并获得自定义声明?
谢谢!