javascript - 在登录时或登录后检查 firebase 的身份验证用户角色
问题描述
我的 firebase 应用有两个不同的角色:user
和admin
. 我在创建过程中分配这些,操作如下:
const admin = require('firebase-admin')
...
const user = await admin.auth().createUser({
email,
emailVerified: true,
password,
displayName: name,
disabled: false
})
await admin.auth().setCustomUserClaims(user.uid, { role: 'user' })
对于创建管理员,我们显然也是这样做的,但最后一行变成如下:
await admin.auth().setCustomUserClaims(user.uid, { role: 'admin' })
这些单独的角色在 firebase 规则中使用,以防止用户访问某些集合以及某些云功能,以防止他们执行某些操作。
我想做的是在我的客户端应用程序上通过检查用户角色来限制对某些部分的访问。
就目前而言,当我进行身份验证时,我无权访问用户角色,所以我不知道如何根据他们的角色限制他们的访问。这是我的验证码:
// authenticating a user
const handle = firebase.auth().onAuthStateChanged(user => {
console.log('Authenticated user', user)
// do stuff
})
这里的问题是,此时给我的用户对象onAuthStateChanged
没有角色。从providerData
属性中,我拥有以下内容:
displayName
email
phoneNumber
photoURL
providerId
uid
问题是如何访问客户端应用程序上的用户角色以阻止某些类型的用户访问客户端应用程序的受限部分?
解决方案
尝试以下代码段:
firebase.auth().currentUser.getIdTokenResult()
.then((idTokenResult) => {
// Confirm the user is an Admin.
if (!!idTokenResult.claims.admin) {
// Show admin UI.
showAdminUI();
} else {
// Show regular user UI.
showRegularUI();
}
})
.catch((error) => {
console.log(error);
});
资源:
推荐阅读
- linux - Gitlab - git 用户无法执行 git 命令
- angular - Angular6 + Cordova:未加载cordova
- vue.js - vue js 2对表格进行排序
- angular - 是否可以在 Angular 4/5/6 组件中使用绝对 URL 或外部 URL?
- zapier - 使用 Zapier 重新调整多个变量
- java - 使用 Java 的 MySQL 数据库的阿拉伯字符问题
- apache-kafka - 一段时间后KafkaIO不均匀分区消耗
- jquery - 让 Pagedown 同时预览 markdown 和 mathjax?
- react-native - React navigation v2,如何在特定屏幕上隐藏材质选项卡导航器?
- office365 - OneDrive Office 365 - 电源查询