SummerEye part9 -会員機能追加-
ファイルを処理する部分は開発できたので、今度はユーザを処理する部分を作ります。
今回はEC2やVMに込み込みの盛り盛りで作るのではなく、いろんなPaaSやBaaSを組み合わせて疎な結合を持ったサービスを作ることも目的としていました。
ユーザ認証はどうやって切り出しましょうか。
Firebaseが楽かつ様々な機能があって良いとオススメされたので、試してみます。
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を使った決済処理を実装したいです。
あとはソーシャルログインもやれたらいいですね。
デザインも整えることができたら、人様に見せられるようになると思います。
参考
- 基礎から分かるActive Directory再入門(11:特別編):Active DirectoryとAzure Active Directoryは何が違うのか? (1/2) – @IT
- 第8回 リアルタイム系BaaSの徹底比較! 国内外BaaS 3社の特徴を理解して,技術選定の幅を広げよう!:MilkcocoaでBaaSを体験!~バックエンドの仕組みと使い方~|gihyo.jp … 技術評論社
- 今さら聞けないセッションとCookie、ログイン・ログアウト(Rails編) – Qiita
- Handling User Authentication with Angular and Flask – Real Python
- 4. Flaskを使いこなす1 | study flask 1 ドキュメント
- Python の Flask でアプリケーションの認証部分を作ってみる | CUBE SUGAR STORAGE
- Flaskのセッション管理 – Study03.net 対シンバシ専用
- Flaskのカスタマイズについて – Qiita
- Using Beaker session with Flask | Flask (A Python Microframework)
- 4. Flaskを使いこなす1 | study flask 1 ドキュメント
- Cookieとセッションをちゃんと理解する – Qiita
- PythonでE-Mailのバリデーションをする – Qiita
- Azure App Serviceにpipを使用できないパッケージをインストールする – Qiita