我有一个Firebase应用程序,它是一个基本的博客网站。我不会对普通用户进行任何身份验证。但是我需要一种方法来验证和/或授权admin
来创建博客文章。
现在,我将所有内容都设置在一个Firebase项目中,并且我打算采用“ hidden
”受保护的路由,例如www.myFirebaseProject.com/admin-xyz
。 PS:我知道这并不是真正的隐藏,但是我的意思是无法通过点击来访问它。
当admin
到达该URL时,他们将提供username
和password
,并被授予访问管理面板和为博客创建帖子的权限。 / p>
我可能会没有“创建帐户” 页面和/或表单,并且将直接从Firebase控制台手动创建和注册管理员用户。
我主要担心的是,任何恶意用户都可以使用firebase.auth().createUserWithEmailAndPassword();
访问我的Firebase项目并创建新帐户,对吗?
从我到目前为止的想法来看,在保持安全的同时,我有两种选择:
选项1:
创建两个用户,并在我的数据库(Firestore)中的用户文档上手动设置一个admin
标志。从那时起,user
集合及其文档显然将受到任何书面保护。
使用Firestore中的该标志授权用户访问管理部分。
选项2:
Firebase Admin SDK支持在用户帐户上定义自定义属性。这提供了在Firebase应用程序中实施各种访问控制策略(包括基于角色的访问控制)的能力。这些自定义属性可以为用户提供不同级别的访问(角色),这些访问级别在应用程序的安全规则中强制执行。
可以为以下常见情况定义用户角色:
- 授予用户访问数据和资源的管理权限。
- 定义用户所属的不同组。
- 提供多级访问:
- 区分付费/未付费订户。
- 区别主持人与普通用户。
- 老师/学生申请表等
- 在用户上添加其他标识符。例如,Firebase用户可以映射到另一个系统中的其他UID。
问题1:
var firebaseConfig = {
apiKey: "api-key",
authDomain: "project-id.firebaseapp.com",
databaseURL: "https://project-id.firebaseio.com",
projectId: "project-id",
storageBucket: "project-id.appspot.com",
messagingSenderId: "sender-id",
appID: "app-id",
};
问题2:
答案 0 :(得分:1)
问题1:
是的,如果您启用了电子邮件密码登录,则任何用户都可以使用前端配置在firebase中创建新的用户帐户。因此,不能保证不会创建新用户。
问题2:
如果您偶尔需要创建管理员(您将对其进行手动标记),则可以使用自定义声明。将数据库用于用户角色使您在管理角色方面更具灵活性。 然后,您可以在前端使用这些声明(例如,角度身份验证防护)来强制管理员角色访问您的视图。
警告:还要对要限制为管理员的数据进行管理员角色检查。