Firebase身份验证规则适用于Facebook提供商,但不适用于email / pwd

时间:2016-06-18 18:36:21

标签: firebase angularfire firebase-security firebase-authentication

我正在尝试在我的数据库上写一些规则,阻止用户写入,除非他们使用匿名'以外的提供程序进行身份验证。这是我的规则,但由于某种原因,当我使用Facebook登录而不是使用电子邮件/密码登录时,它可以正常工作;我得到一个权限被拒绝错误。 PS电子邮件/密码用户是在升级后的SDK之前创建的。有什么想法,为什么这不起作用?

  "updates": {
    ".read": "auth !== null",
    ".write": "auth !== null && auth.provider !== 'anonymous'",
    "$location_id": {
      ".indexOn": "validFrom",
      "$update_id": {
        ".validate": "newData.hasChildren(['displayName', 'place_id', 'name', 'statusValueId', 'update_id', 'user_id', 'validFrom', 'votes'])"
      }
    }
  },

2 个答案:

答案 0 :(得分:2)

检查无效的原因的最佳方法是在firebase控制台中使用模拟器。

您可以在数据库>规则>模拟器(右上角)

中找到它

enter image description here

  1. 在单选按钮中选择写入
  2. 选择切换“已验证”,选择您要测试的提供程序,并在“Auth token payload”中写入您的用户令牌
  3. 在“位置”中写入参考路径
  4. 在“Data(JSON)”中粘贴您要编写的JSON对象
  5. 点击运行,firebase将告诉您哪个规则失败

答案 1 :(得分:1)

我怀疑您遇到了与我相同的错误,其中auth.provider等于anonymous用于电子邮件/密码验证而不是password。可悲的是,我还没有收到Firebase团队的答复。

auth.provider is not set to 'password' when user signs-in with email and password

更新:我在Firebase的Google网上论坛页面获得了一些很好的帮助。他们确认了这个bug并提供了一个解决方法。请参阅以下链接:

https://groups.google.com/d/topic/firebase-talk/C-ljg-CCKl0/discussion