SummerEye part9 -会員機能追加-

ファイルを処理する部分は開発できたので、今度はユーザを処理する部分を作ります。

今回はEC2やVMに込み込みの盛り盛りで作るのではなく、いろんなPaaSやBaaSを組み合わせて疎な結合を持ったサービスを作ることも目的としていました。

ユーザ認証はどうやって切り出しましょうか。

 

Firebaseが楽かつ様々な機能があって良いとオススメされたので、試してみます。

 

Firebase Authenticationでユーザ管理

こちらの記事にまとめました。

Firebase -Authentication-

 

Azure Web Appの所在地もアメリカにしたので、Firebaseもアメリカにしました。

 

pyrebaseというFirebaseを扱うPythonラッパーライブラリを使ってユーザ作成、ログイン処理ができるようになりました。

これをFlask側でうまく扱います。

 

Firebase + Flask ユーザ認証

さて、Firebaseから取得したユーザ情報をFlask側でどう扱うか、です。

DjangoとかはデフォルトのUserモデルを使っていて特に考えていませんでしたが、セッションとクッキーで管理する必要あり?

 

この記事を読む限り、Flaskではセッションを管理していないようです。

セッションを丸っとクッキーに保存することでセッションっぽいものを再現しているとのこと。

 

公式と以下の記事を参考にしました。

 

フォームを作ってemailとpasswordを取得します。

以下のようにpyrebaseでログインしてuser情報を取得します。

firebase = pyrebase.initialize_app(config)
auth = firebase.auth()
user = auth.sign_in_with_email_and_password(email, password)

 

取得したuser情報をsessionに保存。

session['user'] = user

 

Jinja側でuser情報を取り出す場合は、{{session.user.email}}という感じ。

 

ログアウトはsession.pop(‘user’, None)で実装。

 

いい塩梅にログイン、ログアウトを設定。

Firebaseと連携したログイン、ログアウト処理ができました。

 

Firebase + Flask ユーザ作成

pyrebaseのauth.create_user_with_email_and_password(email, password)を使ってFirebaseにユーザを作ります。

バリデーションはFlask側で設定します。

 

emailが不正ではないかチェックします。実在するかどうかはとりあえずチェックしません。

passwordはFirebase側で6文字以上と規定されているのでこれもFlaskでチェックしてあげます。

 

emailのバリデーションはlepl使いました。以下の記事を参考にしました。

 

ユーザ作成後に前項のログイン処理を挟む事も忘れず。

 

デプロイ

git pushしてWeb Appにも変更を反映しようとしたところ、思いがけずエラー。

どうもpyrebaseがインストールできていない様子?

 

こちらの記事を参考に解決を図ります。

 

ただ、Web App on Linuxで新たに作り直した方が今後の運用も考えて良いのでは、とも思います。

要検討。

 

次回

Firebaseを利用したユーザ認証、ユーザ作成を実装できました。

慣れると楽チンっぽいです。

Firebaseハマるかも。

 

次回はStripeを使った決済処理を実装したいです。

あとはソーシャルログインもやれたらいいですね。

デザインも整えることができたら、人様に見せられるようになると思います。

 

参考

コメントを残す