当他们需要身份验证时,我似乎无法使我的数据库规则正常工作。
用户使用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"
}
}
}
}
有什么建议吗?
答案 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
错误。