我正在使用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文档将“密码”列为auth.provider的可能值:https ://firebase.google.com/docs/reference/security/database/#auth
当启用新的“匿名身份验证”功能时,此问题会产生更大的影响(请参阅https://firebase.google.com/docs/auth/ios/anonymous-auth)。据我了解,auth.provider
在安全规则中使用将允许人们区分“匿名”用户和“密码”用户。
我是在寻找错误还是在推理中的某个地方犯了初学者的错误?
作为参考,以下是我正在使用的SDK版本(摘自CocoaPods输出):
Using Firebase (3.2.1)
Using FirebaseAuth (3.0.2)
Using FirebaseDatabase (3.0.1)
Firebase团队确认他们身边某个地方存在错误,并且正在寻求修复。同时,在下面的链接中可以找到一种解决方法:
https://groups.google.com/d/topic/firebase-talk/C-ljg-CCKl0/discussion
解决方法包括使用以下安全规则来检测用户是否使用电子邮件地址进行了身份验证:
auth.token.firebase.identities.email !== null
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句