我的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
问题是我如何才能访问客户端应用程序上的用户角色,以阻止某些类型的用户访问客户端应用程序的受限部分?
答案 0 :(得分:1)
尝试以下代码段:
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);
});