LoginSignup
0
0

More than 1 year has passed since last update.

FirebaseのrealtimeDBの書き込み・読み込みを行う方法

Posted at

Firebaseのプロジェクト画面を開き、プロジェクトの管理をクリックする

Screen Shot 2023-04-19 at 9.43.52.png

サービスアカウントタブの、〇〇個のサービスアカウントタブを押す
そうするとGCPのIAMのサービスアカウントの管理画面にいく

Screen Shot 2023-04-19 at 9.44.06.png

下記の画面は、サービスアカウントが3つ、オーナーが1つ表示されている。
Screen Shot 2023-04-19 at 9.48.21.png

サービスアカウントに適切な権限があるかを確認する(下記2つ)

  • Firebase Authenticate 管理者
  • Firebase Realtime Databse 管理者

次に、サービスアカウントをプログラムで管理できるようにキーを発行する
使うアカウントをクリックし、キータブを開くと、鍵を追加 と出てくる。
Screen Shot 2023-04-19 at 9.52.42.png

json型を指定してダウンロードし、鍵を大事に保管してください。
Screen Shot 2023-04-19 at 9.52.48.png

Railsでは、
ちなみに、Realtime databaseでルールが、以下のようにした場合
(読み込みは誰でもできる・書き込みは認証を通った人のみ)

Screen Shot 2023-04-19 at 9.56.40.png

        # Firebase RealTimeDBに書き込むためのアクセストークンを取得
        CONFIDENTIAL_PATH = "config/#{ファイル名}.josn"
        def get_google_oauth2_access_token
            # 参考: https://github.com/googleapis/google-auth-library-ruby
            scopes =  [
                "https://www.googleapis.com/auth/userinfo.email",
                "https://www.googleapis.com/auth/firebase.database",
            ]
            
            authorizer = Google::Auth::ServiceAccountCredentials.make_creds(json_key_io: File.open(CONFIDENTIAL_PATH),scope: scopes)
            
            authorizer.fetch_access_token!
            
            # トークンの有効時間は1時間のみ
            authorizer.access_token
        end
    def reset_db
        access_token = get_google_oauth2_access_token
        uri = URI("#{REALTIME_DB_ENDPOINT}/schedule_list.json?access_token=#{access_token}")
        request = Net::HTTP::Put.new(uri)
        request.body = {}.to_json
        response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
            http.request(request)
        end
        puts response.body
    end

みたいな感じで操作できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0