ホームページ >バックエンド開発 >Python チュートリアル >Flask-Loginでユーザー認証を実行する方法
認証は、適切な人だけが機密情報にアクセスできるようにするため、ユーザーがデータまたはリソースにアクセスできるようにするWebアプリケーションの重要な部分です。これは、Flask-Loginを使用してフラスコでも実現できます
Flask-Loginは、ユーザーのログインとログアウトを処理し、アプリケーション全体で現在のユーザーを追跡する機能を備えたフラスコの拡張機能です。これにより、Flaskアプリケーションに認証と承認を簡単に実装できます。キーテイクアウト
Flask-Loginによる認証の容易さ:Flask-Loginは、Flaskアプリケーションでのユーザー認証の実装を簡素化します。ユーザーセッション管理、簡単なログイン/ログアウト機能、データベースとのシームレスな統合のためのユーザーローダーコールバックなどの重要な機能を提供します。これは、ユーザーセッションの効率的な管理と認証プロセスの処理に役立ちます。 パスワードの取り扱いとユーザーセッション管理のセキュアー:パスワードをハッシュするためのFlask-Bcryptを使用したパスワードセキュリティの重要性と、Flask-LoginがセッションCookieでユーザーセッションを管理する方法を詳述します。これにより、ユーザーの資格情報が安全に保存され、ユーザーセッションが正確に追跡され、アプリケーションの全体的なセキュリティが強化されます。
実用的な実装ガイダンス:ユーザーモデルの作成、データベース(SQLite)の構成、ユーザー登録とログインのビューの作成、保護ルートでのログアウトロジックの実装など、Flask-Loginのセットアップと使用に関する包括的なガイドを提供します。 Flaskアプリケーションに安全なユーザー認証システムを構築するための実用的なアプローチを提供し、FlaskやWebアプリケーションの開発を新しい人でもアクセスできるようにします。の基本的な知識
pythonバージョン3とフラスコがインストールFlask-sqlalchemy:データベース操作用のSqlalchemyとFlaskを統合
にパスワードセキュリティを追加します
pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>インストールが完了すると、使用したディレクトリにフラスコのログインが自動的にダウンロードされます。
モデルは、アプリケーションで使用するデータ構造の表現です。システム内でデータの編成、保存、操作方法を定義します。モデルは通常、事前に定義された構造に従うデータベースで使用されます。アプリには、次のデータがあります
pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
プロジェクトの範囲に応じて、電子メールアドレスやプロフィール写真など、ユーザーモデルに追加のプロパティを追加することもできます。
データベースの作成アプリケーションでsqliteデータベースを使用するための手順の内訳は次のとおりです。
Sqlalchemyは、Pythonを使用してデータベースを操作するためのツールのセットを提供するオブジェクトリレーショナルマッパーです。ラインdb = sqlalchemy(app)は、sqlalchemyクラスのインスタンスを作成し、それをフラスコアプリケーション(APP)に結合します。 このデータベースを作成するには、create_allメソッドを使用してデータベースを初期化する必要があります。
<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 /。
というフォルダーにあります
<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を作成する必要があります。例を次に示します:
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>コードの内訳です:
<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>
<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<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>本質的に、入力された資格情報が有効であるかどうかを確認し、ユーザーにログインし、成功した場合はウェルカムページにリダイレクトします。ログインが失敗した場合、またはGETリクエストの場合、ユーザーが資格情報を入力するためのログインテンプレートをレンダリングします。
保護されたビューを使用してログアウトロジックを作成します
次に、保護する任意のルートに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'))を使用してログインルートにリダイレクトします。
このチュートリアルの完全なコードを表示し、この記事のgithubリポジトリでその実装について詳しく知ることができます。 Flask-LoginがユーザーセッションのCookieでユーザーセッションを管理する方法
ユーザーがログインしてFlask-Loginによって保護されているページにアクセスした場合、Flask-LoginはセッションCookieをチェックして、ユーザーが認証されているかどうかを確認します。ユーザーが認証されている場合、Flask-Loginはユーザーのプロファイル情報をデータベースからロードし、ビューを利用できるようにします。ユーザーが認証されていない場合、Flask-Loginはユーザーをログインページにリダイレクトします。
ユーザーがWebサイトからログアウトすると、サーバーはユーザーのブラウザからセッションCookieを削除し、ユーザーセッションを終了します。結論
Flaskは、ユーザーセッション管理から承認まで、認証のさまざまな側面に対処するさまざまな機能を提供します。これらの機能を使用することにより、アプリケーションの特定のニーズに合わせた堅牢で安全な認証システムを実装できます。
以上がFlask-Loginでユーザー認証を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。