Правила БД Firebase + Аутентификация не работает

Я не могу заставить свои правила базы данных работать, когда они требуют аутентификации.

Пользователь входит в систему с использованием JavaScript, а затем база данных обновляется с помощью запроса PHP / REST с использованием firebase-PHP.

PHP:

$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)

$response_array это массив из формы HTML. $response_array['userID'] пользовательский идентификатор Firebase.

Эти правила работают (без аутентификации):

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

Они, с аутентификацией, не работают:

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

Ошибка:

{ "error" : "Permission denied" }

Какие-либо предложения?

0

Решение

Как Фрэнк упомянул в комментариях, вы должны позвонить 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 ошибка.

1

Другие решения

Других решений пока нет …