首页 > 解决方案 > 在登录时或登录后检查 firebase 的身份验证用户角色

问题描述

我的 firebase 应用有两个不同的角色:useradmin. 我在创建过程中分配这些,操作如下:

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

问题是如何访问客户端应用程序上的用户角色以阻止某些类型的用户访问客户端应用程序的受限部分?

标签: javascriptfirebase

解决方案


尝试以下代码段:

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);
  });

资源:

Firebase 身份验证


推荐阅读