3

現在、Firebase と PHP を使用して小さなチャットを作成しています。これは、Firebase の良い学習プロジェクトになると思いました。今のところ、とても満足しています。

しかし、私は壁にぶち当たりました。PHP 経由で Firebase に認証システムを実装する方法がわかりません。認証システムに必要なことは非常に具体的です。

チャットを使用できるようにするには、ユーザーはカスタム php ログイン システムを使用してログインする必要があります。ログインすると、チャットで読み書きできるように認証されます。

CURLを使用して、PHPでこれが(たとえあったとしても)どのように可能になるのか、私は本当に理解できませんでした。

私の__construct機能には次のものがあります。

require('/libs/FirebaseLib.php');
$this->firebase = new fireBase('https://<url>.firebaseio.com');

require('/libs/JWT.php');
require('/libs/FirebaseToken.php');
$tokenGen = new Services_FirebaseTokenGenerator('<firebase-secret>');
$this->authtoken = $tokenGen->createToken(
    array(
        'id' => $this->userid
    )
);

Firebase で認証して、ユーザーがチャットで読み書きできるようにし、認証されていないユーザーが読み書きできないようにするにはどうすればよいですか? 注: Firebase のセキュリティ ルールには何もしていません。これは私の質問の一部です。

私はドキュメントを見てきましたが、私は非常に厚いかもしれませんが、探していたものを実際に見つけることができませんでした.

誰かが私を正しい方向に向けてくれることを願っています。

ありがとう!

編集:ユーザーのメッセージでやりたいことを実行した後、phpスクリプトへのajax呼び出しを除いて、意図的にチャットにjavascriptを使用していません。

編集 2:使用されているライブラリへのリンクを追加しました:「Firebase Token Generator」および「Firebase PHP Client

編集 3:私の現在のコードは次のようになります: (参照)

__構造:

$this->authtoken = JWT::encode(
    array(
        'admin' => true,
        'debug' => true,
        'v' => 0,
        'iat' => time(),
        'd' => array('user' => 'admin')
    ),
    '<secret>',
    'HS256'
);

新しいメッセージ機能:

$response = $this->firebase->set('/chat.json?auth=' . $this->authtoken, array(
    'message' => array(
        'username' => 'Test',
        'time' => time(),
        'string' => 'Hello World!'
    )
));

ただし、次のように返されます{ "error" : "invalid_token: Could not parse auth token." }。基本的には管理者権限を取得したい。Firebase シークレットを認証として使用しようとしましたが、同じエラーが返されます。

ルール:

{
  "rules": {
    ".read": "auth.username == 'admin'",
    ".write": "auth.username == 'admin'"
  }
}
4

1 に答える 1

1

一般的なワークフローは次のようになります。

  1. ユーザーがカスタム ログイン システムで認証されたら、サーバー側の PHP コードで Firebase 認証トークンを生成します。(貼り付けたコードスニペットでここまで来たようです)。
  2. そのトークンをクライアントに返します。
  3. クライアントに firebase.auth(<token>); を呼び出してもらいます。サーバーで生成されたトークンを使用して Firebase への認証を行います。
  4. セキュリティ ルールを使用して、クライアントの認証トークンの内容に応じて、クライアントが読み取り/書き込みできるものを制限します。

認証されている場合にすべての Firebase アクセスを許可する単純なシナリオでは、次のようなセキュリティ ルールを設定できます。

{
    "rules": {
        ".read": "auth != null",
        ".write": "auth != null"
     }
}

これにより、認証されたユーザーに Firebase 全体への読み取り/書き込みアクセスが付与されます。ただし、おそらくそれ以上にロックダウンする必要があります(つまり、Firebase の特定の部分への読み取り/書き込みアクセスのみを許可します)。認証ルールとセキュリティ ルールの仕組みに関するウォークスルーについては、セキュリティ クイックスタートをご覧ください。

これが役に立たない場合は、おそらく、どの部分で困惑しているかを詳しく説明できます.

于 2013-04-11T16:23:09.587 に答える