firebase - 即使在登录后,firebase 中的权限也丢失或不足
问题描述
我为我的应用程序使用 facebook 登录。当使用 Facebook 登录创建用户时,后端代码以编程方式将该用户转换为emailVerified
用户。
虽然登录FirebaseAuth.instance.currentUser
给出
User(
displayName: Balaji Venkatraman,
email: ****@gmail.com,
emailVerified: true, // note: Email verified is true
isAnonymous: false,
metadata:
UserMetadata(
creationTime: 2021-01-21 16:36:58.098,
lastSignInTime: 2021-01-21 16:36:58.099),
phoneNumber: null,
photoURL: '',
providerData, [
UserInfo(
displayName: Balaji Venkatraman,
email: '****@gmail.com',
phoneNumber: null,
photoURL: '',)
],
refreshToken: ,
tenantId: null,
uid: sRrazGn8tSWagoD2N3oyCEa92yE2,
)
在这里我能够成功登录并且emailVerfied
标记也是正确的。但是创建集合会给出错误提示(我们有一个规则来检查用户电子邮件是否已验证):
在用户/sRrazGn8tSWagoD2N3oyCEa92yE2/userAssessment/food 处写入失败:状态{code=PERMISSION_DENIED,描述=缺少或权限不足。,原因=null}
这是我的规则
function signedInOrPublic(){
return request.auth != null && request.auth.uid == userId && request.auth.token.firebase.sign_in_provider != "anonymous" && request.auth.token.email_verified == true;
}
match /userAssessment/{category}{
allow read, write: if signedInOrPublic();
}
解决方案
不幸的是,我不记得确切的规则应该如何编写,但是您可以尝试删除一个逻辑表达式以隔离问题,然后您可以谷歌找到正确的编写方法。
您确定 userId 包含用户 UID 吗?
推荐阅读
- javascript - Javascript将日期转换为毫秒
- assembly - 减值重复两次
- javascript - 如何以 datatables.js 的方式实现折叠行?
- javascript - 单击菜单按钮后,如何在wordpress中将移动导航栏菜单背景颜色从透明更改为靛蓝?
- python - Kivy - Scrollview - 如何知道当前显示了哪些小部件
- go - 在 Go 中锁定第三方包的特定版本
- javascript - 什么是 MIME 类型('text/html'),为什么 chrome 不支持它以及如何禁用它
- node.js - 嵌套数组上的猫鼬“填充”返回 null
- java - 如何在Java中对文本文件中的引用字符串进行排序
- ios - 监听 ObservableObject 的变化(使用 Travis CI)