Firebase

雑記 Firebase カスタムトークンを利用したRealtimeDB Rule制御 技術検証

 

 

カスタム認証では他の認証方式とは異なり、Firebase内にユーザの認証情報を持ちません。
そのため、下記の手順で認証を行うことになります。

既存サービスのサーバでユーザ認証を行う

サーバから既存のユーザIDでFirebaseにアクセストークンを発行してもらう

アクセストークンをクライアントに返す

クライアントがアクセストークンでFirebaseにログイン

既存のユーザIDでFirebaseにアクセス可能

https://blog.xxxaz.jp/post-690/

 

全体の流れはこんな感じ。

  1. 外部の認証でUIDを取得する
  2. サーバ側: firebase-adminのcreateCustomToken()でカスタムトークンを作成する
  3. クライアント側: firebaseのsignInWithCustomToken()で認証する

カスタムトークンの作成にfirebase-adminが必要なので、サーバが必須なのが注意。
サーバじゃなくてCloud Functions上でもOK

https://www.memory-lovers.blog/entry/2020/12/01/100000

 

 

https://coconala.com/blogs/search?keyword=%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%83%AB%E3%83%BC%E3%83%AB

秘密鍵の作成

 

https://console.cloud.google.com/apis/credentials?authuser=3&pli=1&project=testfirebasedbrulekanehi-404fb&folder=&organizationId=

 

APIキーの有効化

https://console.cloud.google.com/marketplace/product/google-cloud-platform/customer-identity?hl=ja&project=testfirebasedbrulekanehiro&folder=&organizationId=

 

TestFirebaseDbRuleKanehiro $ composer require firebase/php-jwt

 

Rule

{"rules": {
    ".read":false,
    ".write":false,
    "users": {
      "$user_id": {
        ".write": "auth.uid === $user_id", //ユーザー情報の変更は自分自身のみ
        ".read": "auth.uid === $user_id"
      },    
    },
    "rooms": {
      ".read": "root.child('rooms/users/' + auth.uid).exists()",
      ".write": "root.child('rooms/users/' + auth.uid).exists()",
    },
    "test1":{".read": "auth != null"},
    "test2":{".read": "auth.uid == 'admin'"},
    "test3":{".read": "auth.token.custom_permit_option == 'test'"}
  }
}

 

まとまってる

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)