Firebaseのプロジェクト画面を開き、プロジェクトの管理をクリックする
サービスアカウントタブの、〇〇個のサービスアカウントタブを押す
そうするとGCPのIAMのサービスアカウントの管理画面にいく
下記の画面は、サービスアカウントが3つ、オーナーが1つ表示されている。
サービスアカウントに適切な権限があるかを確認する(下記2つ)
- Firebase Authenticate 管理者
- Firebase Realtime Databse 管理者
次に、サービスアカウントをプログラムで管理できるようにキーを発行する
使うアカウントをクリックし、キータブを開くと、鍵を追加
と出てくる。
json型を指定してダウンロードし、鍵を大事に保管してください。
Railsでは、
ちなみに、Realtime databaseでルールが、以下のようにした場合
(読み込みは誰でもできる・書き込みは認証を通った人のみ)
# 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
みたいな感じで操作できます。