Back to Blog

Flask-Loginのcurrent_userの使い方を解説

flask

2024年7月16日

こんにちは!

Flask-Loginは、Flaskアプリケーションでログイン機能を実装する時に使われる便利なライブラリです。そのFlask-Loginの中にあるcurrent_userの機能はよく使います。

例えば、ログインしている場合に、ユーザー専用ページを表示して、ログインしていない場合は、ログインページに飛ばすなどです。

このような機能をcurrent_userを使うと簡単に実装できます。

今回は、Flask-Loginのcurrent_userの使い方について解説します。

ログイン機能の実装方法については、こちらの記事で詳しく解説しております。

【関連】Flaskでログイン機能を実装する方法を解説【会員登録、ログイン、ログアウト機能】

Flask-Loginのcurrent_userとは?

current_userは、Flask-Loginが提供するグローバルプロキシオブジェクトで、現在のユーザーの情報にアクセスできます。

このオブジェクトは、ユーザーがログインしている場合はユーザーオブジェクトを、ログインしていない場合は匿名ユーザーオブジェクトを返します。

current_userの使い方

current_userを使うには、まずflask_loginモジュールからインポートします。

通常、ビュー関数やテンプレート内で利用されます。

例えば、ユーザーのプロファイルページのビューを設定します。

from flask_login import current_user

@app.route('/profile')
def profile():
    if current_user.is_authenticated:
        return render_template('profile.html', user=current_user)
    else:
        return redirect(url_for('login'))

上記のコードでは、ログインしている場合にprofile.htmlを表示して、ログインしていない場合では、ログインページにリダイレクトする設定をしています。

current_userの部分について詳しく説明します。

current_userのインポート

まず、1行目。ここでは、flask_loginモジュールからcurrent_userをインポートしています。

from flask_login import current_user

ユーザーの認証状態のチェック

5行目のif文では、ユーザーの認証状態をチェックしています。

if current_user.is_authenticated:

current_user.is_authenticatedは、現在のユーザーが認証されているかどうかをチェックします。認証されている場合、このプロパティはTrueを返します。

current_user.is_authenticatedとif文を組み合わせることで、ログインしている場合と、ログインしていない場合の処理を記述することが可能です。

 if current_user.is_authenticated:
        [ログインしている場合の処理]
    else:
        [ログインしていない場合の処理]

今回の場合は、ログインしている場合にprofile.htmlを表示して、ログインしていない場合では、ログインページにリダイレクトする設定をしています。

current_userのプロパティとメソッド

Flask-Loginのcurrent_userオブジェクトは、ユーザーの認証情報を管理するための便利なプロパティとメソッドを提供しています。

以下にそのプロパティとメソッドの一覧を表にまとめます。

プロパティ、メソッド説明
is_authenticatedユーザーが認証されている場合にTrueを返します。
is_activeユーザーアカウントが有効である場合にTrueを返します。通常は、ユーザーがアクティブな状態であり、ログインが許可されているかどうかを示します。
is_anonymousユーザーが匿名ユーザーである場合にTrueを返します。通常はログインしていないユーザーを示します。
get_id()ユーザーの一意のIDを返します。このIDは、ユーザーのセッションを識別するために使用されます。

Flask-Loginのcurrent_userオブジェクトは、ユーザーのカスタム属性(例えば、ユーザー名やメールアドレス)を追加するために、アプリケーションで定義されるユーザーモデルの属性にもアクセスできます。

例えば、以下のようにユーザーモデルを定義したとします。

from flask_login import UserMixin

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(150), unique=True, nullable=False)
    email = db.Column(db.String(150), unique=True, nullable=False)
    password_hash = db.Column(db.String(150), nullable=False)
    roles = db.Column(db.String(50), nullable=True) 

ユーザーモデルは、Flask-LoginのUserMixinを継承することで、ユーザー認証に必要なプロパティとメソッドが使えるようになります。

たとえば、current_userから現在のユーザー情報を取得したい場合は、以下のようにします。

current_user.username #ユーザー名の取得
current_user.email #emailの取得
current_user.roles #権限の取得

current_userをテンプレートで使用する

current_userはテンプレートでも使用できます。

Flaskは、テンプレート内でPythonの変数を利用できるため、current_userも直接参照可能です。

<html>
<body>
    <nav>
        {% if current_user.is_authenticated %}
            <a href="{{ url_for('profile') }}">Profile</a>
            <a href="{{ url_for('logout') }}">Logout</a>
        {% else %}
            <a href="{{ url_for('login') }}">Login</a>
        {% endif %}
    </nav>
</body>
</html>

上記は、Flaskのテンプレートのjinja2のif文で記述しています。if文の使い方はこちらの記事で詳しく解説しています。

【関連】Jinja2のif文の使い方解説!【Flask,Python】

まとめ

今回の記事では、Flask-Loginのcurrent_userの使い方について解説しました。current_userを使うことでログインしているかどうかの判定処理が簡単に実装することができます。

Webアプリケーションを開発する際には、よく使う処理なので覚えておきましょう。

今回の記事が、あなたの開発のお役に立てれば幸いです。

ここまでお読みいただきありがとうございました。

Webの知識を作りながら学ぶ
Flask WebAcademy

SNSアプリやチャットアプリ、さまざまなアプリを作りながら学べる実践的なカリキュラム

詳細を見る