1 回答
TA贡献1829条经验 获得超13个赞
根据谷歌:
Firebase 安全规则介于您的数据和恶意用户之间。您可以编写简单或复杂的规则来保护您的应用程序数据,达到您的特定应用程序所需的粒度级别。
Firebase 安全规则利用可扩展、灵活的配置语言来定义您的用户可以访问实时数据库、Cloud Firestore 和 Cloud Storage 的哪些数据。Firebase 实时数据库规则在规则定义中利用 JSON,而 Cloud Firestore 安全规则和适用于云存储的 Firebase 安全规则利用一种独特的语言来适应更复杂的规则特定结构。
这是您的主要问题:如果用户未经过帐户验证,您将执行一些 Firestore 相关任务。但是,如果他未经过验证,您会再次收到来自 Firestore 的电子邮件。但是您的安全规则描述了除非您经过帐户验证,否则您不应该能够访问数据库。这就是代码失败的地方。这是你的错误:
void performEmailVerification() {
if (firebaseAuth.getCurrentUser().isEmailVerified()) {
// Everything is OK, perform your task
checkSomethingOnFirestore();
return;
}
//User not verified, but you still get a database reference and try to get the email.
final DocumentReference documentReference = ... //Error produced
您需要先执行验证,确认用户已通过验证,然后尝试访问数据库。
另一个因素可能是您需要刷新您的 firebase 帐户对象,如下所示:
FirebaseAuth.getInstance().getCurrentUser().reload();
这样做是为了刷新您的帐户状态。因为 firebase 保留对您帐户的引用并且该引用被缓存,所以重新加载您的帐户是一个有用的想法,因此它会被更新。if
在检查用户是否经过验证的语句之前执行此操作。
添加回答
举报