Полезная нагрузка токена аутентификации БД в реальном времени RN Firebase - PullRequest
0 голосов
/ 19 сентября 2018

Использование react-native-firebase:4.3.x

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

Но просматривая docs Я не могу найти, где настроить Полезная нагрузка токена аутентификации при подключении к firebase.Все, что у него есть - это подключиться к БД, вызывая следующее:

db = firebase.database();

без параметров или что-либо еще.Должен ли я использовать, firebase.auth()?

1 Ответ

0 голосов
/ 24 сентября 2018

Краткий ответ: Весь наш подход к набору правил Firebase RealtimeDB был неверным с самого начала;мы выполнили правила без понимания Firebase Auth и его связи с RealtimeDB.У нас были настройки, правила основанные только на uid и RealtimeDB, сохраняющие некоторый случайный токен в RealtimeDB, надеясь, что мы сможем каким-то образом передать токен на auth payload пользователю.

Длинный ответ: Как указано в собственной базе данных Firebase Документы по безопасности баз данных Правила базы данных напрямую используют аутентификацию Firebase.

С этого момента реализована настраиваемая аутентификация с Аутентификация RNFirebase.io

клиентская сторона:

let postLogin = (userCredentials) => {
  db = firebase.database();
  //...do stuff
}

firebase
  .auth()
  .signInAndRetrieveDataWithCustomToken(token)
  .then(postLogin);

консоль firebase: Project Settings -> Service Accounts -> Generate new private key. , которая генерирует закрытый ключ firebase в формате json и некоторые значения идентификаторов.Импортируйте это в любую библиотеку, которую вы используете на стороне сервера, в нашем случае kreait / firebase-php

Не не разрешают анонимную аутентификацию, что может нанести ущерб цели.

php с использованием kreait / firebase.php:

use Kreait\Firebase\Factory;
use Kreait\Firebase\ServiceAccount;

$serviceAccount = ServiceAccount::fromJsonFile($pathToJson);
$firebase = (new Factory())
  ->withServiceAccount($serviceAccount)
  ->create();

$token = (string) $firebase->getAuth()->createCustomToken($uid, $payload)

Мне не нужно было знать о полезной нагрузке на стороне клиента.Он передается через клиентскую часть в подписанном JWToken.

...