我正在建立一个具有用户和管理员的系统,管理员可以做一些独特的事情(例如“删除用户/对管理仪表板等的访问...”)。
对于前端,我使用ReactJs,对于身份验证,我使用firebase auth(存储用户的身份验证信息),对于用户数据,我具有Express API,该API将数据保存在PostgreSql数据库中。
因此,当新用户注册时,电子邮件和密码将保存在firebase auth中,而其他数据(例如Name,Lastname,address ecc ...)将存储在PostgreSQl db中,其中从唯一UID标识每个用户, firebase在注册后提供。
下面的小图显示了注册系统的工作原理
管理员将手动注册,在PostgreSql中,我有一个名为Admins的表,该表将为管理员存储额外的数据(类似于用户数据,但具有更多属性)。
但是现在我的问题是,如果当前登录的用户是admin或普通用户,我如何在前端检查?
也许在登录后检查登录用户的uid是否在Admins postgreSql表中?但是,就执行权而言,这将太昂贵了???因为每次重新加载页面或类似页面时,我都必须对后端重复检查。由于Firebase以相同的方式管理用户和管理员,因此只有我的后端才能知道用户是否为管理员。
任何人都知道是否有解决此情况的好方法?
谢谢! 大卫(Davide)。
答案 0 :(得分:0)
最好使用Firebase Admin的“ setCustomUserClaims”功能添加到新管理员的auth令牌中。您可以添加类似“ admin”的内容:true。然后,当用户进行身份验证时,您的前端代码可以检查该令牌是否存在。这是Firebase确切执行此操作的指南的链接:https://firebase.google.com/docs/auth/admin/custom-claims