RN Firebase实时数据库身份验证令牌有效负载

时间:2018-09-19 09:20:21

标签: react-native-firebase

使用react-native-firebase:4.3.x

我能够连接到RealtimeDB,我们需要安全性,因此我们已设置规则

但是在浏览docs时,我找不到在连接到Firebase时如何设置 Auth令牌有效载荷的位置。它所要做的就是连接到数据库,调用以下命令:

db = firebase.database();

没有任何参数。我要使用firebase.auth()吗?

1 个答案:

答案 0 :(得分:0)

简短的答案:从一开始,我们对Firebase RealtimeDB规则集的整个方法就不正确;我们在做规则时并不了解Firebase Auth及其与RealtimeDB的联系。我们已经建立了规则,仅基于uid和RealtimeDB的规则,在RealtimeDB上存储了一些随机令牌,希望我们能够以某种方式将 auth负载上的令牌传递给用户。

详细答案: 如Firebase自己的Database Security docs数据库规则所述,数据库规则直接使用Firebase身份验证。

此后,从Authentication 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. 会生成json格式的Firebase私钥和一些标识符值。在本例中,将其导入您在服务器端使用的任何库中 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通过客户端传递。