【发布时间】:2021-10-23 22:52:00
【问题描述】:
我一直在尝试使用 Firebase 自定义声明,并成功地创建了基于用户的角色,例如 manager, editor, admin。这就是我在 Firebase Emulator Suite 中保存自定义声明的方式。
对于用户自定义 clams 设置如下 {"role": "manager"},但每当我尝试登录并获取用户的自定义声明时,它都不起作用。
仅供参考,我也尝试设置这样的自定义声明{"manager": true},但如果我在if and else 条件下使用它,hasCustomClaim("manager") 总是有效,即使我设置了{"manager": false},如果我尝试使用管理员权限登录,但经理级别仍然正常工作
const adminOnly = () => hasCustomClaim("admin");
const editorOnly = () => hasCustomClaim("editor");
const managerOnly = () => hasCustomClaim("manager" );
const editorOnly2d = pipe(customClaims, map(claims => claims.role == "editor"));
const mngOnly2 = pipe(customClaims, map(claims => claims.role == "manager"));
如何获取当前登录的用户自定义声明,以便我可以根据用户角色设置路由?
这是我登录后得到的authUser.getIdTokenResult(true)
aud: "testing"
auth_time: 1629796111
email: "test12@gmail.com"
email_verified:false
exp: 1629799711
firebase: {identities: {…}, sign_in_provider: "password"}
iat: 1629796111
iss: "https://securetoken.google.com/testing"
role: "manager"
name: "Testing"
sub: "ZUlXd59HMhFI5gyozxW1xw0IXtPi"
user_id: "ZUlXd59HMhFI5gyozxW1xw0IXtPi"
我试图搜索这个问题,但他们都建议我上面使用的相同内容。
【问题讨论】:
-
自定义声明是 Firebase 身份验证的一项功能,而不是 Firestore 的一项功能。我已为您解决了这个问题,但对于未来的问题,请记住这一点。通过正确标记和标记您的问题,具有正确知识的人更有可能找到它。
标签: javascript angular google-cloud-firestore firebase-authentication angularfire2