我使用 Firebase Firestore
进行数据库存储。我有一个场景,我需要使用电话号码和 OTP 管理用户登录和注销。由于 Firebase
身份验证使用电子邮件 ID 管理身份验证,或者如果您每次需要使用 OTP
验证它时都想将其与电话号码一起使用,这对于我的应用程序来说是不可行的,所以,我创建了自己的身份验证流程,其中使用一次 OTP 身份验证,并将用户数据存储到集合中,然后当用户登录后,我直接从集合中检查它。
现在工作正常,但由于我在更改安全规则时遇到问题,因为我想限制用户读取数据库。但我不知道如何编写它,因为到目前为止我已经找到了很多解决方案,但所有解决方案都在请求中进行了身份验证,但由于我没有使用身份验证,我可能在请求中没有身份验证,并且可能会发现它为空。
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write : if true;
}
}
}
我已经授予了对所有集合的读写访问权限,因此任何拥有 key 的人都可以访问数据库,但我想使用安全规则来限制它,并且我找到了一种在创建或更新时限制用户的方法,就像我将要做的那样请求设置或更新时获取资源,但在读取或获取数据时可能没有资源,因为我没有传递任何数据。因此,如果您知道如何编写此类规则,请帮助我。提前致谢...
最佳答案
致allow only users that are authentication with Firebase access to data ,你的规则是:
allow read, write: if request.auth.uid != null;
如果没有 Firebase 身份验证,则无法执行相同的操作,因为将用户数据传递到安全规则的唯一方法是通过 Firebase 身份验证。
如果您有自己的身份验证机制,则可以将其实现为 custom provider within Firebase Authentication 。在此方法中,您使用服务器端代码根据您拥有的用户信息生成 Firebase token ,然后该 token 中的信息将在 auth.token
下的安全规则中可用。
关于android - 在请求数据时以及我们没有使用 firebase 身份验证的情况下,如何为 firebase firestore 编写安全规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56291839/