😎

🔐 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スキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
https://onewedge.co.jp/

Discussion