※このページではアフィリエイト広告を利用しています

Flaskアプリにログイン機能を追加する(セッション管理)

Python

FlaskはPythonで使われる軽量なWebフレームワークの一つで、短時間でシンプルなアプリを構築できるのが特徴です。この記事では、Flaskアプリに「ログイン機能」を追加する方法を、初心者向けに解説します。

スポンサーリンク
スポンサーリンク

セッションとは?

Webアプリにおいて、セッションとは「ユーザーごとに情報を保持するメカニズム」のことです。HTTPは非状態であるため、ログインしたゆとりやショッピングカートの中身など、ユーザーの状態を持続するためにセッションが必要になります。

Flaskではsessionオブジェクトを使うことで、簡単にユーザー状態を保つことができます。

Flaskでセッションを使う法

Flaskのsessionを使用するには、最初にシークレットキーの設定が必要です(データを保証するため)。

from flask import Flask, session

app = Flask(__name__)
app.secret_key = 'your_secret_key'  # 本番では密に保管

ユーザー登録フォームの作成

HTMLファイル: templates/register.html

<form method="POST">
  <input type="text" name="username" placeholder="ユーザー名">
  <input type="password" name="password" placeholder="パスワード">
  <button type="submit">登録</button>
</form>

Flask側:

from flask import request, render_template

users = {}

@app.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        if username in users:
            return 'User already exists'
        users[username] = password
        return 'Registered!'
    return render_template('register.html')

ログインフォームの作成

HTMLファイル: templates/login.html

<form method="POST">
  <input type="text" name="username" placeholder="ユーザー名">
  <input type="password" name="password" placeholder="パスワード">
  <button type="submit">ログイン</button>
</form>

Flask側:

from flask import Flask, render_template, session

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        if users.get(username) == password:
            session['user'] = username
            return 'Logged in!'
        else:
            return 'Invalid credentials'
    return render_template('login.html')

sessionを使った状態管理

session はディクショナリのように使えます:

from flask import Flask, render_template, session

@app.route('/dashboard')
def dashboard():
    if 'user' in session:
        return f"Hello, {session['user']}!"
    return 'You are not logged in'

ログアウト機能

from flask import Flask, render_template, session

@app.route('/logout')
def logout():
    session.pop('user', None)
    return 'Logged out'

進んだチェックと実際の実装

  • パスワードは固定値ではなく、werkzeug.security を使ってハッシュ化する。
  • SQLite + SQLAlchemy でユーザーをDB管理する
  • Flask-Login などのパッケージを使うと、もっとセキュアにログイン管理が可能

おわりに

Flaskでは、ログイン機能をわずかなコードで実装できます。

まずはsessionを使って基本的なログイン状態の保持をしてみましょう。

以降は、Flask-LoginやSQLAlchemyを使って本格的なユーザー管理に進むこともできます。

タイトルとURLをコピーしました