使用Firebase Auth(NextJS)实现用户角色

e7arh2l6  于 2023-08-04  发布在  其他
关注(0)|答案(2)|浏览(104)

我试图为我的网站(这是一种博客)创建一个多层次的角色系统。
我已经实现了经典的Firebase Auth身份验证系统,仅使用电子邮件/密码组合。到目前为止,每个用户都可以发布/编辑文章,因为我没有任何粒度。我想改变这一点,并在几个角色之间进行分离-从管理员/版主/用户开始,但角色似乎不可用作默认的Firebase用户模型。
我怎样才能把我的逻辑迁移到这个上面,我应该使用哪个工具而不需要重做所有的事情?我见过有人使用Firestore(但这是很久以前的事了,Firebase肯定从那时起就改变了),还有一些人倾向于更喜欢Firebase Auth SDK。到目前为止,新的东西甚至可以与这个身份平台的东西,我还没有真正理解。
请注意,我使用的是:

  • NextJS 13(仅限JavaScript),集成了Next API(SSR)
  • Vercel上的部署
  • 在一些Firebase存储资产(主要是图像)和MongoDB(其他所有内容)之间拆分数据库
qlckcl4x

qlckcl4x1#

Firebase身份验证仅处理身份验证(验证用户的身份)。它没有任何内置的授权机制(确定允许用户做什么)。
也就是说,您可以通过多种方式在Firebase之上构建授权模型。要考虑的一些主题:

  • 有两个常见的地方可以存储授权信息(用例中的角色):或者作为custom claim in the user's profile,或者作为数据库中的单独记录。
  • 为了保护对Cloud Storage中文件的访问,您可以使用Firebase安全规则。有关此方面的示例,请参阅有关实现自定义声明属性和角色的Firebase文档。这里有几点需要注意:
  • 安全规则适用于通过Firebase客户端SDK访问Cloud Storage,但不适用于通过下载URL或Google Cloud(服务器端)SDK访问文件。
  • 该示例显示用户的角色作为自定义声明存储在其用户配置文件中。虽然这在今天仍然是可能的,但您现在也可以从存储安全规则访问Firestore,这为您提供了存储用户角色信息的第二个选项。
  • 对于MongoDB,您必须在自己的代码中实现授权。如果您将授权信息作为自定义声明存储在用户配置文件中,则可以decode the token并从中获取信息。如果您将其存储在数据库中,则可以从那里读取并应用它。
bfrts1fy

bfrts1fy2#

您可以创建自己的用户表或集合,根据电子邮件或userId保存用户的角色。

相关问题