Firebase数据库规则+身份验证无效

时间:2018-02-09 21:14:55

标签: php firebase firebase-realtime-database firebase-security-rules

当他们需要身份验证时,我似乎无法使我的数据库规则正常工作。

用户使用JavaScript登录,然后使用firebase-php通过PHP / REST请求更新数据库。

PHP:

likesCount

$firebase = new \Firebase\FirebaseLib('https://AppNameGoesHere.firebaseio.com/'); $data = array( 'field1' => $response_array['field1'], 'field2' => $response_array['field2'], 'field3' => $response_array['field3'] ); $firebase->set('users/' . $response_array['userID'], $data) 是HTML表单中的数组。 $response_array是Firebase用户uid。

这些规则有效(无身份验证):

$response_array['userID']

这些,使用auth,不起作用:

{
  "rules": {
    "users": {
      "$uid": {
        ".read": true,
        ".write": true
      }
    }
  }
}

错误:

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth.uid === $uid",
        ".write": "auth.uid === $uid"
      }
    }
  }
}

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

正如Frank在评论中提到的那样,您必须调用setToken()以验证所有后续数据库读/写。要从客户端JavaScript获取该令牌并将其传递给PHP端点,您应该使用getIdToken,如下所示:

firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idToken) {
  // Send token to your PHP backend via HTTPS
  // ...
}).catch(function(error) {
  // Handle error
});

使用idToken值,您可以将其传递给firebase-php库的setToken函数:

...
$firebase->setToken(idToken)
$firebase->set('users/' . $response_array['userID'], $data)

只要$response_array['userID']与提出该请求的人的uid匹配,就不应再收到Permission denied错误。