Flask-Loginの使い方を完全解説!初心者にもわかるログイン状態の管理方法
生徒
「Webサイトでログイン状態を記憶させるって、どうやるんですか?」
先生
「FlaskではFlask-Loginという拡張機能を使えば、簡単にログイン状態を管理できますよ。」
生徒
「難しそうだけど、初心者でも使えるんですか?」
先生
「もちろんです!今日はプログラミング未経験の方でも分かるように、基本からゆっくり解説していきましょう。」
1. Flask-Loginとは?
Flask-Loginは、PythonのWebフレームワークであるFlaskで「ログイン機能」を作るための拡張ライブラリです。
ログインしているかどうかの状態(ログイン状態)を、Webサイトの中で記憶・管理してくれます。
たとえば、通販サイトで「ログインしたまま買い物ができる」のも、こうした仕組みのおかげです。
Flask-Loginは、次のようなことを自動でやってくれます:
- ユーザーがログインしているかどうかをチェック
- ログインしていない人にはログインページを表示
- ログイン中のユーザー情報にアクセス
2. Flask-Loginをインストールしよう
まずは、Flask-Loginをインストールします。「インストール」とは、パソコンに必要な部品を入れることです。
次のコマンドをターミナルやコマンドプロンプトで入力しましょう。
pip install flask-login
3. FlaskアプリにFlask-Loginを組み込もう
次は、Flaskアプリの中にFlask-Loginを設定する方法です。まず、基本のコードを見てみましょう。
from flask import Flask, redirect, url_for, render_template, request
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
app = Flask(__name__)
app.secret_key = 'ひみつのカギ'
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login'
secret_keyは、セッション(状態の保存)に使う鍵です。
人に知られないような文字列を設定します。
login_manager.login_viewには、ログインページの関数名を指定します。
4. ユーザークラスの作り方
ログイン機能には「ユーザー情報」が必要です。
今回は簡単な例として、ユーザーをPythonのクラスで表現します。
class User(UserMixin):
def __init__(self, id):
self.id = id
users = {'testuser': {'password': 'password123'}}
UserMixinというのは、「ログインに必要な機能」を自動でつけてくれる部品です。
ここでは、testuserという名前のユーザーだけを登録しています。
5. ログイン処理の書き方
いよいよログインページを作ります。次のコードを追加してください。
@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'] == password:
user = User(username)
login_user(user)
return redirect(url_for('protected'))
return 'ログイン失敗'
return '''
<form method="post">
ユーザー名:<input type="text" name="username"><br>
パスワード:<input type="password" name="password"><br>
<input type="submit" value="ログイン">
</form>
'''
login_user()を使うと、そのユーザーを「ログイン状態」にできます。
redirect()は「別のページに移動させる」ための関数です。
6. ログインが必要なページを作る
ログインしている人だけが見られるページは、次のように作ります。
@app.route('/protected')
@login_required
def protected():
return f'ようこそ、{current_user.id}さん!このページはログイン中のみ見られます。'
@login_requiredは、ログインしていない人を/loginに飛ばします。
current_user.idで、今ログインしているユーザー名を表示できます。
7. ログアウト処理の書き方
ログアウトしたいときの処理もとても簡単です。
@app.route('/logout')
@login_required
def logout():
logout_user()
return 'ログアウトしました'
logout_user()を使うことで、ログイン状態を解除できます。
8. ユーザー情報の読み込み関数
最後に、ユーザーIDからユーザー情報を読み込む関数を追加します。
@login_manager.user_loader
def load_user(user_id):
if user_id in users:
return User(user_id)
return None
user_loaderは、ログイン状態の復元に使われる特別な関数です。
9. 完成したコードを動かしてみよう!
ここまでのコードを組み合わせて保存すれば、簡単なログイン機能が完成します。
Flaskアプリを起動して、ブラウザで試してみましょう。
if __name__ == '__main__':
app.run(debug=True)
http://localhost:5000/login にアクセスして、testuserとpassword123でログインしてみてください。
まとめ
Flaskで安全なログイン機能を実装するためには、ユーザー情報の管理、ログイン状態の保持、保護されたページの制御など、複数の要素を丁寧に組み合わせる必要があります。とくにFlask-Loginは、ログイン状態の継続やセッションの取り扱いを簡略化してくれる便利な拡張機能であり、初心者がつまずきやすい「ログインしたユーザーだけが見られるページの作り方」や「ユーザー情報の読み込み」なども、少ない記述で自然に扱える点が大きな特徴です。実際の開発現場でもFlask-Loginはよく利用されており、学んでおくことで小規模サービスから中規模アプリケーションまで幅広く応用ができます。 また、ユーザークラスの作成やログイン処理、ログアウト処理など、Flask-Loginが提供する仕組みを理解しながら実装すると、Webアプリケーションにおける認証の流れが自然と身につきます。セッションやsecret_keyの役割、@login_requiredデコレーターによるページ保護、current_userによるログイン中ユーザー情報の取得などは、Web開発における基本的かつ重要な知識であり、今回の記事の流れに沿って実際にコードを書くことで確実に習得できます。 以下はまとめとして、今回学んだFlask-Loginの流れを再確認できるサンプルコードです。実際の開発でも似た構成を取ることが多いため、ひとつの基本形として覚えておくと便利です。
サンプルプログラム(まとめ版)
from flask import Flask, redirect, url_for, request
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
app = Flask(__name__)
app.secret_key = 'まとめのひみつのカギ'
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login'
class User(UserMixin):
def __init__(self, id):
self.id = id
users = {'testuser': {'password': 'password123'}}
@login_manager.user_loader
def load_user(user_id):
if user_id in users:
return User(user_id)
return None
@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'] == password:
login_user(User(username))
return redirect(url_for('mypage'))
return 'ログイン失敗しました'
return '<form method="post">ユーザー名:<input name="username"><br>パスワード:<input type="password" name="password"><br><input type="submit" value="ログイン"></form>'
@app.route('/mypage')
@login_required
def mypage():
return f'{current_user.id}さんとしてログインしています'
@app.route('/logout')
@login_required
def logout():
logout_user()
return 'ログアウトしました'
if __name__ == '__main__':
app.run(debug=True)
このサンプルは、記事内で紹介した流れをひとつにまとめた形で、ログイン処理・保護されたページの作成・ログアウトの一連の流れを確認できます。こうした構成を理解しておくことで、より複雑なユーザー管理やデータベースと連動した本格的な認証機能へと発展させることも可能になります。とくに初学者の段階では「ログインしたユーザーだけが見られるページがどう動くのか」「ログイン状態がどう保持されているのか」を意識しながらコードを読むことが非常に大切です。 Flask-Loginは必要最低限のAPIで構成されているため、シンプルながら学習効果が高く、PythonによるWeb開発の基礎を身につけるのに最適なライブラリといえます。今回学んだ内容をもとに、実際に自分でコードを動かしながら理解を深めていくことで、認証機能の仕組みがより鮮明に理解できるようになります。
生徒
「Flask-Loginって、思っていたよりシンプルに使えるんですね。ログイン状態の管理って難しいものだと思っていました。」
先生
「そうですね。Flask-Loginは最低限の機能に絞られているので、初心者でも理解しやすい仕組みになっていますよ。今回のコードをしっかり理解すれば、ログイン機能の基本は問題ありません。」
生徒
「@login_requiredを付けるだけでページが守られるのが便利でした。current_userでユーザー名を取れるのも分かりやすかったです。」
先生
「はい。ログイン状態の保持やユーザー情報の読み込みなどはFlask-Loginが裏側で処理してくれるので、必要なところにだけコードを書けばよいんです。次はデータベースと合わせて本格的な認証機能にも挑戦できますね。」
生徒
「はい!実際にコードを動かしながら練習してみます!」