簡単な答え: FirebaseRealtimeDBのルールセットに対する私たちのアプローチ全体は最初から正しくありませんでした。FirebaseAuthとRealtimeDBとの関係を理解せずにルールを実行しました。uidとRealtimeDBのみに基づくセットアップ、ルールがあり、認証ペイロードのトークンをユーザーに渡すことができることを期待して、RealtimeDBにランダムなトークンを格納しました。
長い答え: Firebase独自のデータベースセキュリティドキュメントに記載されているように、データベースルールはFirebase認証を直接使用します。
それ以降、AuthenticationRNFirebase.ioからカスタム認証を実装しました
クライアント側:
let postLogin = (userCredentials) => {
db = firebase.database();
//...do stuff
}
firebase
.auth()
.signInAndRetrieveDataWithCustomToken(token)
.then(postLogin);
firebase console: Project Settings -> Service Accounts -> Generate new private key.
json形式のfirebase秘密鍵といくつかの識別子値を生成します。この場合、サーバー側で使用しているライブラリにそれをインポートしますkreait / firebase-php
匿名認証を有効にしないでください。有効にすると目的が果たせなくなります。
kreait / firebase.phpを使用した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でクライアント側を通過します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加