ホームページ  >  記事  >  バックエンド開発  >  Flask-Security: Python Web アプリケーションにユーザー認証とパスワード暗号化を追加する

Flask-Security: Python Web アプリケーションにユーザー認証とパスワード暗号化を追加する

WBOY
WBOYオリジナル
2023-06-17 14:28:402426ブラウズ

Flask-Security: Python Web アプリケーションへのユーザー認証とパスワード暗号化の追加

インターネットの発展に伴い、ユーザーのデータ セキュリティを保護するためにユーザー認証とパスワード暗号化を必要とするアプリケーションがますます増えています。 Python 言語には、非常に人気のある Web フレームワークである Flask があります。 Flask-Security は、開発者が Python Web アプリケーションにユーザー認証およびパスワード暗号化機能を簡単に追加できるようにする、Flask フレームワークに基づく拡張ライブラリです。

Flask-Security には次の機能があります:

  • 既存の Flask アプリケーションに簡単に統合できます
  • パスワード、トークン、ソーシャル メディア ログインなどの複数の認証方法をサポートします。など。
  • パスワードの暗号化と復号化をサポートします (Bcrypt 暗号化アルゴリズムを使用)
  • ユーザー ロール管理機能を提供します。これにより、アプリケーションへのユーザー アクセスを制御するために、異なるユーザーに異なるロールを割り当てることができます。
この記事では、Flask-Security を使用してユーザー認証とパスワード暗号化機能を Python Web アプリケーションに追加する方法について説明します。

Flask-Security のインストール

Flask-Security を使い始める前に、まずインストールする必要があります。 pip を使用して Flask-Security をインストールできます:

pip install Flask-Security

もちろん、Flask や Flask-SQLAlchemy (または他の ORM ライブラリ) など、他の必要な依存ライブラリもインストールする必要があります:

pip install Flask Flask-SQLAlchemy

Flask-Security の構成

Flask-Security をインストールした後、ユーザー認証とパスワード暗号化を有効にするためにいくつかのパラメーターを構成する必要があります。まず、Flask-Security 拡張ライブラリを Flask アプリケーションに導入する必要があります:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_security import Security, SQLAlchemyUserDatastore, UserMixin, RoleMixin, login_required

次に、データベース接続情報、キーなどを含むいくつかの必要な構成パラメータを定義する必要があります:

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
app.config['SECRET_KEY'] = 'mysecretkey'

ここではデータベースとして SQLite を使用し、それをファイルに保存します。もちろん、対応するデータベース接続情報を変更するだけで、他のデータベース (MySQL や PostgreSQL など) を使用することもできます。

次に、ユーザー クラスとロール クラスを定義する必要があります。ここでは、ORM ライブラリとして SQLAlchemy を使用します:

db = SQLAlchemy(app)


class Role(db.Model, RoleMixin):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(80), unique=True)
    description = db.Column(db.String(255))


class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255), unique=True)
    password = db.Column(db.String(255))
    active = db.Column(db.Boolean())
    confirmed_at = db.Column(db.DateTime())
    roles = db.relationship('Role', secondary='user_roles',
                             backref=db.backref('users', lazy='dynamic'))


user_datastore = SQLAlchemyUserDatastore(db, User, Role)


class UserRoles(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    user_id = db.Column(db.Integer(), db.ForeignKey('user.id'))
    role_id = db.Column(db.Integer(), db.ForeignKey('role.id'))

ここでは、ユーザー クラスとロール クラスを定義し、それらを追加しますはそれぞれ user_roles テーブルに関連付けられています。また、ユーザーとロールの情報を管理するための user_datastore オブジェクトも定義します。

次に、セキュリティ拡張ライブラリを通じて定義したパラメータとクラスを設定する必要があります:

security = Security(app, user_datastore)

この時点で、Flask-Security の設定は完了です。次に、Flask アプリケーションでユーザー認証とパスワード暗号化機能を使用できます。

ユーザー認証とパスワード暗号化に Flask-Security を使用する

Flask-Security を使用する前に、新しい Flask ブループリントを作成し、ユーザーのログイン、登録、ログアウトとその他の操作:​​

from flask import Blueprint, render_template, redirect, url_for, request
from flask_security import login_user, logout_user, current_user, login_required

security_blueprint = Blueprint('security', __name__)


@security_blueprint.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        email = request.form.get('email')
        password = request.form.get('password')
        user = user_datastore.find_user(email=email)
        if user is not None and user.password == password:
            login_user(user)
            return redirect(url_for('index'))
        return redirect(url_for('login'))
    return render_template('login.html')


@security_blueprint.route('/logout')
@login_required
def logout():
    logout_user()
    return redirect(url_for('index'))


@security_blueprint.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        email = request.form.get('email')
        password = request.form.get('password')
        user = user_datastore.create_user(email=email, password=password)
        user_datastore.add_role_to_user(user, 'user')
        db.session.commit()
        login_user(user)
        return redirect(url_for('index'))
    return render_template('register.html')

ここでは、ログイン、ログアウト、登録という 3 つのビュー関数を定義します。ログイン関数はユーザーのログイン操作を処理するために使用され、レジスタ関数はユーザーの登録操作を処理するために使用され、ログアウト関数はユーザーのログアウト操作を処理するために使用されます。このうち、Flask-Securityが提供するlogin_user関数とlogout_user関数を利用して、ユーザーのログイン機能とログアウト機能を実装します。 register 関数では、user_datastore.create_user 関数と user_datastore.add_role_to_user 関数を使用して新しいユーザーを作成し、デフォルトのユーザー ロールを割り当てます。

ここでは、Flask のテンプレート エンジンを使用して HTML ページをレンダリングします。詳細については、Flask テンプレート エンジンのドキュメントを参照してください。

最後に、このブループリントを Flask アプリケーションに登録する必要があります:

app.register_blueprint(security_blueprint)

この時点で、Flask-Security の使用は完了です。これで、Flask アプリケーションを起動し、ブラウザ経由でアクセスできるようになりました。

概要

この記事では、Flask-Security を使用してユーザー認証とパスワード暗号化機能を Python Web アプリケーションに追加する方法を紹介しました。この記事を読むことで、Flask-Security の基本的な使い方を理解し、その特徴や注意点を理解することができます。実際のアプリケーションでは、ニーズに合わせて Flask-Security の機能を自由にカスタマイズおよび拡張できます。

以上がFlask-Security: Python Web アプリケーションにユーザー認証とパスワード暗号化を追加するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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