Flask-Security: Python 웹 애플리케이션에 사용자 인증 및 비밀번호 암호화 추가

WBOY
풀어 주다: 2023-06-17 14:28:40
원래의
2443명이 탐색했습니다.

Flask-보안: Python 웹 애플리케이션에 사용자 인증 및 비밀번호 암호화 추가

인터넷이 지속적으로 발전함에 따라 점점 더 많은 애플리케이션에서 사용자 데이터 보안을 보호하기 위해 사용자 인증 및 비밀번호 암호화가 필요합니다. Python 언어에는 매우 인기 있는 웹 프레임워크인 Flask가 있습니다. Flask-Security는 개발자가 Python 웹 애플리케이션에 사용자 인증 및 비밀번호 암호화 기능을 쉽게 추가하는 데 도움이 되는 Flask 프레임워크 기반의 확장 라이브러리입니다.

Flask-Security에는 다음 기능이 있습니다.

  • 기존 Flask 애플리케이션에 쉽게 통합 가능
  • 비밀번호, 토큰, 소셜 미디어 로그인 등을 포함한 다양한 인증 방법 지원
  • 비밀번호 암호화 및 복호화 지원(Bcrypt 암호화 사용) 알고리즘)
  • 애플리케이션에 대한 사용자 액세스를 제어하기 위해 다양한 사용자에게 다양한 역할을 할당할 수 있는 사용자 역할 관리 기능을 제공합니다.

이 기사에서는 Flask-Security를 ​​사용하여 Python에 사용자 인증 및 비밀번호 암호화 기능을 추가하는 방법을 소개합니다. 웹 애플리케이션.

Flask-Security 설치

Flask-Security를 ​​사용하기 전에 먼저 설치해야 합니다. pip를 사용하여 Flask-Security를 ​​설치할 수 있습니다.

pip install Flask-Security
로그인 후 복사

물론 Flask 및 Flask-SQLAlchemy(또는 기타 ORM 라이브러리)를 포함하여 다른 필수 종속 라이브러리도 설치해야 합니다.

pip install Flask Flask-SQLAlchemy
로그인 후 복사

Configure Flask-Security

In 설치 Flask-Security를 ​​완료한 후 사용자 인증 및 비밀번호 암호화 기능을 활성화하려면 일부 매개변수를 구성해야 합니다. 먼저 Flask 애플리케이션에 Flask-Security 확장 라이브러리를 도입해야 합니다.

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)를 사용할 수도 있으며 해당 데이터베이스 연결 정보만 수정하면 됩니다.

다음으로 User 및 Role 클래스를 정의해야 합니다. 여기서는 SQLAlchemy를 ORM 라이브러리로 사용합니다.

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 클래스와 Role 클래스를 정의하고 각각 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')
로그인 후 복사

여기서는 로그인, 로그아웃, 등록이라는 세 가지 보기 기능을 정의합니다. 로그인 함수는 사용자 로그인 작업을 처리하는 데 사용되며, 등록 함수는 사용자 등록 작업을 처리하는 데 사용되며, 로그아웃 함수는 사용자 로그아웃 작업을 처리하는 데 사용됩니다. 그 중 Flask-Security에서 제공하는 login_user, logout_user 함수를 사용하여 사용자 로그인 및 로그아웃 기능을 구현합니다. 등록 함수에서는 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 웹 애플리케이션에 사용자 인증 및 비밀번호 암호화 기능을 추가하는 방법을 다루었습니다. 이 글을 공부함으로써 우리는 Flask-Security의 기본적인 사용법을 이해하고 그 특징과 주의사항을 이해할 수 있습니다. 실제 애플리케이션에서는 필요에 따라 Flask-Security의 기능을 자유롭게 사용자 정의하고 확장할 수 있습니다.

위 내용은 Flask-Security: Python 웹 애플리케이션에 사용자 인증 및 비밀번호 암호화 추가의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿