Firebase 为什么我能';不验证用户?

Firebase 为什么我能';不验证用户?,firebase,firebase-security,Firebase,Firebase Security,我正在开发聊天插件,有两种类型的用户:操作员和访问者。但是,我无法成功添加用户 以下是我的安全规则: { "rules": { // By default, make all data private unless specified otherwise. ".read": "auth != null", ".write": "auth != null", // Only operators or user itself can update their d

我正在开发聊天插件,有两种类型的用户:操作员和访问者。但是,我无法成功添加用户

以下是我的安全规则:

{
  "rules": {
    // By default, make all data private unless specified otherwise.
    ".read": "auth != null",
    ".write": "auth != null",

    // Only operators or user itself can update their data
    "users": {
      "$user_id": {
        ".read": "auth != null && ($user_id === auth.user_id || auth.operator === true)",
        ".write": "auth != null && ($user_id === auth.user_id || auth.operator === true)",
        ".validate": "($user_id === newData.child('user_id').val() && newData.hasChildren(['name', 'type', 'status']))"
      }
    }    
  }
}
在聊天控制台中将用户添加到Firebase DB时,我收到了这些日志消息:

Authenticated successfully with payload: Object {user_id: 112, is_operator: true}
Auth expires at: Thu Aug 15 2013 20:12:22 GMT+0300 (GTB Daylight Time)
FIREBASE: Attempt to write {"type":"operator","name":"op","user_id":112} to /users/operators/112 with auth={"user_id":112,"is_operator":true}
FIREBASE:   /:.write: "auth != null"
FIREBASE:       => true
FIREBASE:   /users/operators:.validate: "($user_id === newData.child('user_id').val() && newData.hasChildren(['name', 'type', 'status']))"
FIREBASE:       => false
FIREBASE: Validation failed.
FIREBASE: Write was denied.
FIREBASE WARNING: set at /users/operators/112 failed: permission_denied
(!) ERROR: Error: PERMISSION_DENIED :: auth() function while creating user
我如何解决这个问题

解决方案 我的
$user\u id
错误。它应该是“.validate”部分中的
auth.user\u id


$user\u id
错误。它应该是
中的
auth.user\u id
。验证“
部分:

".validate": "(auth.user_id === newData.child('user_id').val() && newData.hasChildren(['name', 'type', 'status']))"

$user\u id
错误。它应该是
中的
auth.user\u id
。验证“
部分:

".validate": "(auth.user_id === newData.child('user_id').val() && newData.hasChildren(['name', 'type', 'status']))"

在身份验证令牌中,
user\u id
似乎是一个整数,但所有Firebase子密钥都是字符串。因此,
$user\u id
将永远不会匹配整数
112
。尝试将
user\u id
的值修改为令牌生成或规则中的字符串(
$user\u id===''+auth.user\u id
),看看这是否有帮助。作为补充说明,只有一个.write规则必须计算为true才能成功写入。这意味着“$user_id”下的.write(和.read)规则没有意义,因为任何经过身份验证的用户都将被允许在那里写入,因为根目录下的“auth!=null”规则的计算结果将为true。您可能只想从根目录中删除该规则。@RobDiMarco是的。它也能工作!真的有必要吗?我的解决方案呢?我已经编辑了这个问题。@dino很高兴你把它编辑好了!你能澄清你的最后一个问题吗?@henrikstroem我用过,你想在生成安全令牌时将“debug”变量设置为true(检查:同一页上的部分)。然后,所有日志将显示在浏览器控制台上。在身份验证令牌中,
user\u id
似乎是一个整数,但所有Firebase子密钥都是字符串。因此,
$user\u id
将永远不会匹配整数
112
。尝试将
user\u id
的值修改为令牌生成或规则中的字符串(
$user\u id===''+auth.user\u id
),看看这是否有帮助。作为补充说明,只有一个.write规则必须计算为true才能成功写入。这意味着“$user_id”下的.write(和.read)规则没有意义,因为任何经过身份验证的用户都将被允许在那里写入,因为根目录下的“auth!=null”规则的计算结果将为true。您可能只想从根目录中删除该规则。@RobDiMarco是的。它也能工作!真的有必要吗?我的解决方案呢?我已经编辑了这个问题。@dino很高兴你把它编辑好了!你能澄清你的最后一个问题吗?@henrikstroem我用过,你想在生成安全令牌时将“debug”变量设置为true(检查:同一页上的部分)。然后,所有日志将显示在浏览器控制台上。