認証は、適切な人だけが機密情報にアクセスできるようにするため、ユーザーがデータまたはリソースにアクセスできるようにする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を使用して、特定のページまたはルートを保護し、アプリケーションへのさまざまなレベルのアクセスをユーザーに付与できます。
- 前提条件
- この記事で長く続くには、次のことが必要です。
- 明らかに、Webブラウザへのアクセスも必要です
- 始めましょう
- フラスコログインモジュールを完全に使用するには、フラスコロギンやその他の必要な依存関係をインストールする必要があります。これらのライブラリは、アプリの機能を改善するために必要な機能とツールを提供します。それらをインストールするには、コマンドプロンプトまたは端末を開き、次のPIPコマンドを実行します。
HTMLとCSS
の基本的な知識
pythonバージョン3とフラスコがインストール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データベースを使用するための手順の内訳は次のとおりです。
Sqlalchemyは、Pythonを使用してデータベースを操作するためのツールのセットを提供するオブジェクトリレーショナルマッパーです。ラインdb = sqlalchemy(app)は、sqlalchemyクラスのインスタンスを作成し、それをフラスコアプリケーション(APP)に結合します。 このデータベースを作成するには、create_allメソッドを使用してデータベースを初期化する必要があります。
- このコードは、通常、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 /。というフォルダーにあります
-
<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>{self.username}</user></span>>'</span>
-
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>{self.username}</user></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>
- ユーザー名とパスワードの両方が検証されている場合、ユーザーは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>{self.username}</user></span>>'</span>
ただし、要求方法が投稿されていない場合、または詳細が正しくない場合、login.htmlテンプレートをレンダリングします。
-
app<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>
本質的に、入力された資格情報が有効であるかどうかを確認し、ユーザーにログインし、成功した場合はウェルカムページにリダイレクトします。ログインが失敗した場合、またはGETリクエストの場合、ユーザーが資格情報を入力するためのログインテンプレートをレンダリングします。
ほとんどのアプリケーションでは、ユーザーがログインしていない場合、一部のページはアクセスできません。これには、トランザクション履歴、ドラフト、ログアウトページなどのページが含まれます。 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 サイトの他の関連記事を参照してください。

PythonListsareimplementedasdynamicarrays、notlinkedlists.1)they restorediguourmemoryblocks、それはパフォーマンスに影響を与えることに影響を与えます

pythonoffersfourmainmethodstoremoveelements fromalist:1)removesthefirstoccurrenceofavalue、2)pop(index(index(index)removes regvess returnsaspecifiedindex、3)delstatementremoveselementselementsbyindexorseLice、および4)clear()

toresolvea "許可denided" errors whenrunningascript、sofflowthesesteps:1)checkandadaddadaddadadaddaddadadadaddadaddadaddadaddaddaddaddaddadaddadaddaddaddaddadaddaddaddadadaddadaddadaddadadisionsisingmod xmyscript.shtomakeitexexutable.2)

ArraySarecrucialinpythonimageprocessing asheyenable efficientmanipulation analysisofimagedata.1)画像anverttonumpyArrays、with grayscaleimagesasas2darraysandcolorimagesas.

ArsareSareBetterElement-WiseOperationsduetof of ActassandoptimizedImplementations.1)ArrayshaveContigUousMoryFordiRectAccess.2)ListSareFlexibleButSlowerDueTopotentialDynamicresizizizizing.3)

Numpyの配列全体の数学的操作は、ベクトル化された操作を通じて効率的に実装できます。 1)追加(arr 2)などの簡単な演算子を使用して、配列で操作を実行します。 2)Numpyは、基礎となるC言語ライブラリを使用して、コンピューティング速度を向上させます。 3)乗算、分割、指数などの複雑な操作を実行できます。 4)放送操作に注意して、配列の形状が互換性があることを確認します。 5)np.sum()などのnumpy関数を使用すると、パフォーマンスが大幅に向上する可能性があります。

Pythonでは、要素をリストに挿入するための2つの主要な方法があります。1)挿入(インデックス、値)メソッドを使用して、指定されたインデックスに要素を挿入できますが、大きなリストの先頭に挿入することは非効率的です。 2)Append(Value)メソッドを使用して、リストの最後に要素を追加します。これは非常に効率的です。大規模なリストの場合、append()を使用するか、dequeまたはnumpy配列を使用してパフォーマンスを最適化することを検討することをお勧めします。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
