我正在使用Firebase(最新版本)开发iOS应用程序,当用户使用电子邮件和密码进行身份验证时,我在安全规则中遇到了 auth.provider
表达式问题 . 我希望 auth.provider
表达式返回 password
,但它看起来像是返回 anonymous
.
在Firebase控制台中,我启用了电子邮件/密码和Google作为提供商,并设置了以下安全规则:
{
"rules": {
"users": {
"$uid": {
// the user is allowed to read
".read": "auth.uid === $uid",
// the non-anonymous user is allowed to write
".write": "auth.uid === $uid && auth.provider !== 'anonymous'"
// more here, omitted for brevity
}
}
}
}
在我的应用程序中,当使用电子邮件和密码以用户XYZ身份登录时,我无法在/ users / XYZ节点下设置值 . 我收到“拒绝许可”错误 . 用户使用Google凭据登录的情况并非如此,它可以按预期工作 .
看起来罪魁祸首是条件 auth.provider !== 'anonymous'
. 对于电子邮件/密码登录,我希望提供商等于 password
;相反,它似乎设置为 anonymous
. Firebase文档将"password"列为auth.provider的可能值:https://firebase.google.com/docs/reference/security/database/#auth
当一个人启用新功能时,此问题会产生更大的影响(请参阅https://firebase.google.com/docs/auth/ios/anonymous-auth) . 据我了解,在安全规则中使用 auth.provider
可以区分"anonymous"用户和"password"用户 .
我是在看一个错误还是在我的推理中某个地方犯了一个初学者的错误?
作为参考,这里是我正在使用的SDK版本(摘自CocoaPods输出):
Using Firebase (3.2.1)
Using FirebaseAuth (3.0.2)
Using FirebaseDatabase (3.0.1)
2 回答
Firebase团队确认他们身边有一个错误,正在努力解决问题 . 与此同时,下面的链接中有一个解决方法:
https://groups.google.com/d/topic/firebase-talk/C-ljg-CCKl0/discussion
解决方法包括使用以下安全规则来检测用户使用电子邮件地址进行身份验证:
不是很有帮助,但我想说我使用Javascript客户端API有同样的问题 . 我已向Firebase小组发送了支持问题 . 如果我得到任何更新,我会在这里发布 .