🔐 Flask実践編:ログイン機能とセッション管理を作ってみよう
Flaskを使ってユーザー登録フォームができたら、次は「ログイン」や「ログアウト」などのセッション管理を学ぶステップです。このページでは、ログイン処理の基本的な作り方を、Flaskのセッション機能を使って実践的に紹介します。
🧠 このページで学べること
- ユーザー情報の保存(仮のデータベースを使って管理する方法)
- ログインフォームの作成(HTMLでユーザー名とパスワードの入力欄を作る)
- 正しいユーザーかどうかの確認(送られてきたデータをチェックする)
- ログイン状態を記録するセッションの使い方(ログイン中かどうかを判定)
- ログアウト処理の作成(ログイン状態を解除する方法)
💾 ユーザー情報を用意しよう(仮データ)
本格的なアプリではデータベースを使いますが、今回は練習のためにPythonの「辞書」を使って、ユーザー名とパスワードをあらかじめ登録しておきます。
# users.py
users = {
"alice": "password123",
"bob": "securepass"
}
このように users という辞書に、ユーザー名をキー、パスワードを値として登録しておけば、あとでフォームから送られてきた情報と照らし合わせることができます。
📝 ログインフォームを作成
ユーザーが名前とパスワードを入力できるように、HTMLでフォームを作ります。これを login.html に保存しましょう。
<!-- login.html -->
<form method="POST">
<label>ユーザー名:</label>
<input type="text" name="username" required><br>
<label>パスワード:</label>
<input type="password" name="password" required><br>
<input type="submit" value="ログイン">
</form>
このフォームでは、POSTメソッドを使って、ユーザー名とパスワードをサーバーに送信します。name="username" や name="password" は、Flask側で使う名前と一致している必要があります。
🔐 ログイン処理とセッション管理
ログイン機能を動かすためのPythonコードを app.py に書きます。フォームから送られてきたデータを受け取り、ユーザー辞書と照合し、一致すればログイン成功とします。
# app.py
from flask import Flask, render_template, request, redirect, url_for, session, flash
from users import users
app = Flask(__name__)
app.secret_key = 'secret-key-for-session'
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST":
username = request.form["username"]
password = request.form["password"]
# 入力されたユーザー名とパスワードをチェック
if username in users and users[username] == password:
session["username"] = username # ログイン状態をセッションに記録
flash("ログイン成功!")
return redirect(url_for("mypage"))
else:
flash("ユーザー名またはパスワードが違います")
return render_template("login.html")
@app.route("/mypage")
def mypage():
# ログイン状態のチェック
if "username" in session:
return f"ようこそ、{session['username']}さん!これはマイページです。"
else:
return redirect(url_for("login"))
@app.route("/logout")
def logout():
session.pop("username", None) # ログイン情報を削除
flash("ログアウトしました")
return redirect(url_for("login"))
このコードでは、ログイン状態を確認するために session という辞書のような仕組みを使っています。
✅ セッションとは?
Flaskの session は、ユーザーごとに情報を一時的に保存できるしくみです。セッションに記録されたデータは、ユーザーのブラウザに一時的にひもづけられ、ログイン状態の管理などに使えます。
この例では、ログイン成功時に session["username"] にユーザー名を保存しています。ログインしているかどうかは、"username" in session で調べられます。
セッションを使うと、ログイン後のページ(マイページなど)で、「今のユーザーは誰?」という情報を保持できます。ログアウト時は session.pop("username") でその情報を削除します。
📦 まとめ
- session を使えば、誰がログインしているかを記録できる!
- ユーザー名とパスワードは、辞書やデータベースと照らし合わせてチェック!
- flash() を使うと、ユーザーにメッセージ(成功・失敗)を画面に表示できる!
このように、Flaskではわずかなコードでログイン処理を作ることができます。より安全な方法として、パスワードの暗号化やデータベースとの連携、ログイン回数の制限などもあります。
株式会社ONE WEDGE
【Serverlessで世の中をもっと楽しく】 ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
Discussion