ホームページ >バックエンド開発 >Python チュートリアル >Flask-Loginでユーザー認証を実行する方法

Flask-Loginでユーザー認証を実行する方法

Lisa Kudrow
Lisa Kudrowオリジナル
2025-02-09 08:47:13421ブラウズ

Flask-Loginでユーザー認証を実行する方法

この記事では、Flask-Loginが提供するさまざまな機能と、それらを使用してWebアプリケーションに安全なユーザーログイン機能を作成する方法について説明します。この記事の終わりまでに、Flask-Loginを使用してFlaskアプリケーションに安全なユーザー認証を実装する方法をよく理解できます。

認証は、適切な人だけが機密情報にアクセスできるようにするため、ユーザーがデータまたはリソースにアクセスできるようにするWebアプリケーションの重要な部分です。これは、Flask-Loginを使用してフラスコでも実現できます

Flask-Loginは、ユーザーのログインとログアウトを処理し、アプリケーション全体で現在のユーザーを追跡する機能を備えたフラスコの拡張機能です。これにより、Flaskアプリケーションに認証と承認を簡単に実装できます。

キーテイクアウト

Flask-Loginによる認証の容易さ:Flask-Loginは、Flaskアプリケーションでのユーザー認証の実装を簡素化します。ユーザーセッション管理、簡単なログイン/ログアウト機能、データベースとのシームレスな統合のためのユーザーローダーコールバックなどの重要な機能を提供します。これは、ユーザーセッションの効率的な管理と認証プロセスの処理に役立ちます。 パスワードの取り扱いとユーザーセッション管理のセキュアー:パスワードをハッシュするためのFlask-Bcryptを使用したパスワードセキュリティの重要性と、Flask-LoginがセッションCookieでユーザーセッションを管理する方法を詳述します。これにより、ユーザーの資格情報が安全に保存され、ユーザーセッションが正確に追跡され、アプリケーションの全体的なセキュリティが強化されます。

実用的な実装ガイダンス:ユーザーモデルの作成、データベース(SQLite)の構成、ユーザー登録とログインのビューの作成、保護ルートでのログアウトロジックの実装など、Flask-Loginのセットアップと使用に関する包括的なガイドを提供します。 Flaskアプリケーションに安全なユーザー認証システムを構築するための実用的なアプローチを提供し、FlaskやWebアプリケーションの開発を新しい人でもアクセスできるようにします。

なぜFlask-login?
    を使用するのか
  • Flask-Loginには、Flaskアプリケーションで認証をシームレスに実行できるようにする多くの機能と機能があります。 Flask-login:
  • を使用することの利点の一部を以下に示します
    • ユーザーセッション管理。 Flask-Loginは、ユーザーセッションの作成と破壊を処理します。また、ユーザーがログインしているかどうかを簡単に確認できるように、セッションに現在のユーザーのIDを保存することもできます。
    • ログインおよびログアウト機能。 Flask-Loginは、組み込みのログインおよびログアウト機能を提供します。これらの機能は、セッションの作成と破壊やユーザーのリダイレクトを適切なページにリダイレクトするなど、すべての重要なプロセスを処理します。
    • ユーザーローダーコールバック。 Flask-Loginを使用すると、ユーザーローダーコールバックを定義できます。このコールバックは、現在のセッションのユーザーオブジェクトをロードするために使用されます。これは、ユーザー情報を保存するためにデータベースを使用している場合に便利です。
    • 認証と承認。 Flask-Loginにより、アプリケーションに認証と承認を簡単に実装できます。 Flask-Loginを使用して、特定のページまたはルートを保護し、アプリケーションへのさまざまなレベルのアクセスをユーザーに付与できます。
    • 前提条件
    • この記事で長く続くには、次のことが必要です。
    PythonとFlaskの構文の知識

    HTMLとCSS

    の基本的な知識

    pythonバージョン3とフラスコがインストール
    • 明らかに、Webブラウザへのアクセスも必要です
    • 始めましょう
    • フラスコログインモジュールを完全に使用するには、フラスコロギンやその他の必要な依存関係をインストールする必要があります。これらのライブラリは、アプリの機能を改善するために必要な機能とツールを提供します。それらをインストールするには、コマンドプロンプトまたは端末を開き、次のPIPコマンドを実行します。
    これらのライブラリのそれぞれが使用されているものの内訳は次のとおりです。

    Flask-sqlalchemy:データベース操作用のSqlalchemyとFlaskを統合

    Flask-Bcrypt:BCRYPTハッシュを追加して、Flask

    にパスワードセキュリティを追加します

pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
インストールが完了すると、使用したディレクトリにフラスコのログインが自動的にダウンロードされます。

    注:執筆時点では、FlaskとWerkzeugの最新バージョンで依存関係を解決する際にわずかな問題があります。これを解決するには、Werkzeugのバージョン2.3.0を強制的に強制する必要があります。これは現在唯一の既知のバージョンであるためです。
  • 依存関係がインストールされたら、フラスコアプリでそれらを初期化する必要があります:
  • 上記のコードスニペットでは、アプリケーションのLoginManagerオブジェクトも初期化しました。 LoginManagerは、ユーザーセッションを処理するために必要な構成をセットアップするために使用されるフラスコロギンの拡張です。
  • ユーザーモデルの作成

モデルは、アプリケーションで使用するデータ構造の表現です。システム内でデータの編成、保存、操作方法を定義します。モデルは通常、事前に定義された構造に従うデータベースで使用されます。アプリには、次のデータがあります

  • 一意のid
  • aユーザー名
  • パスワード(ハッシュ)
pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>

プロジェクトの範囲に応じて、電子メールアドレスやプロフィール写真など、ユーザーモデルに追加のプロパティを追加することもできます。

データベースの作成

ユーザーモデルを定義したら、前のモデルで作成したデータ構造を保存するデータベースを作成する必要があります。 この記事では、SQLiteデータベースを使用します。これは、SQLiteが軽量でサーバーレスデータベースエンジンであるためです。これにより、個別のインストールを必要としないため、セットアップと使用が簡単になります。また、小規模から中型のアプリケーションにも適しています。

アプリケーションでsqliteデータベースを使用するための手順の内訳は次のとおりです。

このスニペットでは、/// ...ファイルへの相対パス - Site.dbを示します。これは、SQLiteデータベースファイルに使用した名前です。この名前は、お好みのものに変更できます 次に、このスニペットを使用してフラスコスクラルチェミーormを初期化する必要があります。

Sqlalchemyは、Pythonを使用してデータベースを操作するためのツールのセットを提供するオブジェクトリレーショナルマッパーです。ラインdb = sqlalchemy(app)は、sqlalchemyクラスのインスタンスを作成し、それをフラスコアプリケーション(APP)に結合します。 このデータベースを作成するには、create_allメソッドを使用してデータベースを初期化する必要があります。
  1. このコードは、通常、Pythonスクリプトの最後に、またはデータベースの初期化専用の別のスクリプトに配置されます。スクリプトを実行すると、以前に定義したモデルに基づいて、データベースファイルが対応するテーブルで作成されます。
    <span>from flask_sqlalchemy import SQLAlchemy
    </span>
    <span>from flask_login import UserMixin, LoginManager, login_user, logout_user, login_required
    </span>
    <span>from flask_bcrypt import Bcrypt
    </span>
    <span>from flask_login import LoginManager
    </span> app <span>= Flask(__name__)
    </span>
    login_manager <span>= LoginManager()
    </span>
    login_manager<span>.init_app(app)  </span>
    この場合、コードは、まだ存在しない場合、ユーザーテーブルを使用してSite.dbファイルを作成します。 site.dbファイルは通常、 /instance /。

    というフォルダーにあります

  2. <span>class User(UserMixin):
    </span>
    <span>id = db.Column(db.Integer, primary_key=True)
    </span>username <span>= db.Column(db.String(64), unique=True)
    </span>password_hash <span>= db.Column(db.String(128))
    </span>
    <span>def __repr__(self):
    </span>  <span>return <span>f'<User <span>{self.username}</span>>'</span></span>

    次に、ユーザーIDを取得し、対応するユーザーオブジェクトを返すユーザー_loaderを作成する必要があります。例を次に示します:
  3. app<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>
    パスワードハッシュ

    パスワードハッシュは、データベースに保存される前にユーザーのパスワードの暗号化表現を保存するセキュリティ測定です。このようにして、アプリケーションのセキュリティが損なわれた場合でも、実際のパスワードを取得することがより困難になります。

    通常、パスワードは最初に登録プロセスでハッシュされ、データベースに保存されます。その後、ユーザーがログインするたびに、パスワードが再度ハッシュされ、データベースに保存されているハッシュされたパスワードと比較されます。 2つのパスワードが一致する場合、ユーザーは認証され、アプリケーションへのアクセスが与えられます。Flask-Bcrypt

    を使用して、パスワードをハッシュおよび検証する方法

    Flaskには、この機能を実現するのに役立つFlask-Bcryptと呼ばれる拡張機能があります。 Generate_password_hash()とcheck_password_hash()。

    の2つの主要な機能があります

    thegenerate_password_hash()関数は、ユーザーのパスワードを引数として取得し、ハッシュされたパスワードを返します。これは通常、登録ロジックで使用されます。

    check_password_hash()関数は、パスワードとハッシュされたパスワードを引数として取り、2つのパスワードが一致する場合はtrueを返します。これは、ログインビューへのアクセスを付与する前に呼び出されます

    レジスタビューの作成

    ビューは、ユーザーのブラウザに送信されるHTML、JSON、またはその他のデータを生成するために使用されるフラスコフレームワークの一部です。このコードスニペットでは、ユーザーの入力を受け入れ、データベースに詳細を追加するビューを作成します。

    pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
    コードの内訳です:

      最初の行では、URLパス /ログインのルートを定義します。このルートは、GETリクエストと投稿の両方を受け入れます。ルートに関連付けられているログイン()関数は、リクエストが行われたときに実行されます。
    • 次に、リクエストメソッドがPOSTメソッドであるかどうかを確認します。
    • 確認されたら、関数はログインフォームでユーザーが入力した値を取得します。
      <span>from flask_sqlalchemy import SQLAlchemy
      </span>
      <span>from flask_login import UserMixin, LoginManager, login_user, logout_user, login_required
      </span>
      <span>from flask_bcrypt import Bcrypt
      </span>
      <span>from flask_login import LoginManager
      </span> app <span>= Flask(__name__)
      </span>
      login_manager <span>= LoginManager()
      </span>
      login_manager<span>.init_app(app)  </span>

      次に、提供されたユーザー名を持つユーザーのデータベースをクエリします。提供されたユーザー名を持つユーザーが見つかってパスワードが一致する場合、このブロック内のコードが実行されます。
      <span>class User(UserMixin):
      </span>
      <span>id = db.Column(db.Integer, primary_key=True)
      </span>username <span>= db.Column(db.String(64), unique=True)
      </span>password_hash <span>= db.Column(db.String(128))
      </span>
      <span>def __repr__(self):
      </span>  <span>return <span>f'<User <span>{self.username}</span>>'</span></span>
    • ログインビューの作成
    • ログインビューでは、ページからの入力を受け入れるロジックを作成し、データベースの行が任意の行に一致するかどうかを確認します。

    コードの仕組みの内訳です:

    最初の行で - @app.route( ' /login'、methods = ['get'、 'post']): - URLパス /ログインのルートを定義するデコレータを使用しています。ルートは、GETリクエストと投稿の両方を受け入れます。関連する関数であるLogin()は、このルートにリクエストが行われると実行されます。

    login()関数は、リクエストメソッドが投稿されているかどうかを確認することから始まります。
    app<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>

    一度、それが投稿リクエストであることが確認され、ログインフォームでユーザーが入力した値を取得します:

    pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
  4. それから、提供されたユーザー名を持つユーザーのデータベースを照会します。
    <span>from flask_sqlalchemy import SQLAlchemy
    </span>
    <span>from flask_login import UserMixin, LoginManager, login_user, logout_user, login_required
    </span>
    <span>from flask_bcrypt import Bcrypt
    </span>
    <span>from flask_login import LoginManager
    </span> app <span>= Flask(__name__)
    </span>
    login_manager <span>= LoginManager()
    </span>
    login_manager<span>.init_app(app)  </span>
  5. ユーザー名とパスワードの両方が検証されている場合、ユーザーはFlask-Loginのlogin_userとリダイレクト関数を使用してアクセスを許可されます。
    <span>class User(UserMixin):
    </span>
    <span>id = db.Column(db.Integer, primary_key=True)
    </span>username <span>= db.Column(db.String(64), unique=True)
    </span>password_hash <span>= db.Column(db.String(128))
    </span>
    <span>def __repr__(self):
    </span>  <span>return <span>f'<User <span>{self.username}</span>>'</span></span>
  6. ただし、要求方法が投稿されていない場合、または詳細が正しくない場合、login.htmlテンプレートをレンダリングします。
  7. app<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>
    本質的に、入力された資格情報が有効であるかどうかを確認し、ユーザーにログインし、成功した場合はウェルカムページにリダイレクトします。ログインが失敗した場合、またはGETリクエストの場合、ユーザーが資格情報を入力するためのログインテンプレートをレンダリングします。

    保護されたビューを使用してログアウトロジックを作成します
  8. ほとんどのアプリケーションでは、ユーザーがログインしていない場合、一部のページはアクセスできません。これには、トランザクション履歴、ドラフト、ログアウトページなどのページが含まれます。 Flask-Loginは、これらのページ/ルートを保護し、login_requiredデコレーターを使用して認証されたユーザーへのアクセスを制限する便利な方法を提供します。それがどのように機能するかの内訳は次のとおりです。

    この機能を利用するには、flask-loginからlogin_requiredデコレーターをインポートする必要があります:

    次に、保護する任意のルートにlogin_requiredデコレータを追加する必要があります。たとえば、ユーザーがログインしたときにのみアクセスできるログアウトページを作成しましょう。

    これがどのように機能するかの内訳です:
    db <span>= SQLAlchemy(app)</span>

    ログインビューのように、 @app.route( ' /logout')は、URLパス /ログアウトのルートを定義します。
    <span>if __name__ == '__main__':
    </span>
    db<span>.create_all()
    </span>
    app<span>.run(debug=True)</span>
    次に、ログアウトルートにアクセスするためにユーザーをログインする必要があることを保証するlogin_requiredデコレータを追加します。ユーザーがログインしていない場合、このルートにアクセスしようとすると、ログインページにリダイレクトされます。 ログアウト関数の内部では、logout_user()が呼び出されます。この関数はFlask-Loginによって提供され、現在のユーザーをログアウトするために使用されます。

    ユーザーをログアウトした後、関数はredirect(url_for( 'login'))を使用してログインルートにリダイレクトします。

    したがって、ユーザーが /ログアウトルートにアクセスすると、Flask-Loginはログイン(@Login_Required)を確認し、ログアウトし、ログインページにリダイレクトします。これにより、Flaskアプリケーションでユーザーログアウトを安全に処理できます。 login_requiredデコレーターは /保護されたルートに適用され、認証されたユーザーのみがアクセスできることを示します。また、ユーザーがログインせずに保護されたページにアクセスしようとした場合、Flask-Loginはそれらをログインページにリダイレクトします。
  • テンプレートの追加
  • フラスコ内の
  • テンプレートを使用すると、HTMLページを使用してサイトの外観を定義できます。 app.pyファイルにロジックを完全に実装するには、以下の写真のHTMLページを作成します。
  • 以下のアニメーションは、テンプレートがサイトのさまざまなページをどのようにレンダリングするかを示しています。

    このチュートリアルの完全なコードを表示し、この記事のgithubリポジトリでその実装について詳しく知ることができます。 Flask-LoginがユーザーセッションのCookieでユーザーセッションを管理する方法

    ユーザーセッションは、ユーザーがログインしている間にユーザー情報の追跡と更新に使用されるシステムです。Flask-Loginは、ユーザーのブラウザにセッションCookieを保存することにより、これらのセッションを管理します。セッションクッキーは、ユーザーのセッションに一意の識別子を含む小さなデータです。

    ユーザーがFlask-Loginを使用してWebサイトにログインすると、サーバーはセッションCookieを生成し、ユーザーのブラウザに送信します。ブラウザはセッションCookieを保存し、すべてのリクエストにサーバーに含めます。サーバーはセッションCookieを使用して、ユーザーとセッション状態を識別します。 たとえば、

    ユーザーがログインしてFlask-Loginによって保護されているページにアクセスした場合、Flask-LoginはセッションCookieをチェックして、ユーザーが認証されているかどうかを確認します。ユーザーが認証されている場合、Flask-Loginはユーザーのプロファイル情報をデータベースからロードし、ビューを利用できるようにします。ユーザーが認証されていない場合、Flask-Loginはユーザーをログインページにリダイレクトします。

    ユーザーがWebサイトからログアウトすると、サーバーはユーザーのブラウザからセッションCookieを削除し、ユーザーセッションを終了します。

    結論

    Flaskは、ユーザーセッション管理から承認まで、認証のさまざまな側面に対処するさまざまな機能を提供します。これらの機能を使用することにより、アプリケーションの特定のニーズに合わせた堅牢で安全な認証システムを実装できます。

以上がFlask-Loginでユーザー認証を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。