Firebase Authentication

#BaaS#firebase#Python

ユーザ認証でユーザデータを保持するのってドキドキですよね。漏洩したらどうしようとか。 それにそもそもデータベース作って、あれこれやって、ってやるのも面倒です。 そういうのをBaaS(Backend as a Service)に任せてみます。   今回はFirebaseを選択しました。 オススメされたからというのもあるのですが、Google傘下ということで何かと情報も多そうかなというのも理由です。   今回はまずFirebaseのアカウント登録からAuthenticationを使ったユーザ認証までまとめます。

アカウント登録

公式サイトにアクセスして早速使ってみます。

  Firebaseは2014年にGoogleに買収されています。 Googleアカウントで利用できるので、普段Chromeを使っていると楽チンです。   「プロジェクトを追加」   モーダルが立ち上がるのでよしなに記入。   早速画面が立ち上がりました。素敵。

Authenticationでユーザ作成

Firebase Authenticationを使うと簡単にユーザ認証を扱うことができます。   左カラムから「Authentication」を選択。 「ユーザを追加」で試しにユーザを作成してみます。   適当に入力。   できました。 このユーザアカウントを使って試しにログインをしてみます。

Pythonプロジェクトと連携

初期設定

FirebaseはAPI経由で利用できます。 こちらで各言語のライブラリが紹介されています。

  Pythonは3つほどあります。 Githubのスター数が多いPyrebaseを使うことにします。 (最終更新日が9ヶ月前と若干心配ですが)

  インストールします。

pip install pyrebase

Authentication利用 -ログイン-

Firebase上でAPIキーとプロジェクトIDを確認します。 前項で作成したユーザのメールアドレスとパスワードもメモしておきます。   こんな感じです。 pyrebase.initialize_app(config)でFirebaseと接続、 firebase.auth()でAuthenticationを利用、 auth.sign_in_with_email_and_password(email, password)でメールアドレスとパスワードを使ってログインします。

import pyrebase
config = {
"apiKey": "apiKey",
"authDomain": "projectId.firebaseapp.com",
"databaseURL": "https://projectId.firebaseio.com",
"storageBucket": "projectId.appspot.com"
}
email = 'email'
password = 'password'
def main():
firebase = pyrebase.initialize_app(config)
auth = firebase.auth()
user = auth.sign_in_with_email_and_password(email, password)
print(user)
return
if __name__ == "__main__":
main()

  ログインした時のuser情報を表示したところ、以下の情報が取得できました。

  • idToken: トークン
  • displayName: 表示名(デフォルトでは空欄)
  • registered: 登録しているかどうかboolean
  • localId: ID
  • expiresIn: トークンの有効期限
  • refreshToken: 有効期限延長用のトークン
  • kind: ログインした手段?(例: identitytoolkit#VerifyPasswordResponse)
  • email: メールアドレス

Authentication利用 -ユーザ作成-

auth.create_user_with_email_and_password(email, password)とすることでユーザを作成できます。 簡単。 作成したuser情報を返します。上述のログイン時の情報と同じです。

Authentication利用 -その他-

Githubのコードに何ができるか書いてあるのでまとめました。

  • sign_in_with_email_and_password(self, email, password): ログイン
  • create_custom_token(self, uid, additional_claims=None):
  • sign_in_with_custom_token(self, token):
  • refresh(self, refresh_token): トークンの有効期限延長
  • get_account_info(self, id_token): アカウント情報取得
  • send_email_verification(self, id_token):
  • send_password_reset_email(self, email):
  • verify_password_reset_code(self, reset_code, new_password):
  • create_user_with_email_and_password(self, email, password): ユーザ作成

  ソーシャルログインには対応していないようですね。 同じことやろうとしている人。

  Pyrebaseはプルリクとかも放置されているっぽいので、そこから先は自分で実装する必要がありそうです。 JS側で扱うのがスタンダードなんでしょうか。 「firebase javascript」も「firebase python」も40万件ぐらいヒットするからそんな変わらないと思ったんですが。

所感

とりあえず、ユーザ作成とログインができるようになったので、 あとはPythonプロジェクト側でフォーム作って、バリデーションすれば最低限のユーザ管理機能はつけられそうです。   DB立てるのとどっちが楽かと言われればそんなに変わらない気がするけれど、 Firebase上でグラフィカルにチェックできるのはいいですね。デザインもおしゃれで気持ちいです。

参考