Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Flask-Security: Menambah pengesahan pengguna dan penyulitan kata laluan pada aplikasi web Python

Flask-Security: Menambah pengesahan pengguna dan penyulitan kata laluan pada aplikasi web Python

WBOY
WBOYasal
2023-06-17 14:28:402446semak imbas

Flask-Security: Tambahkan pengesahan pengguna dan penyulitan kata laluan pada aplikasi web Python

Ketika Internet terus berkembang, semakin banyak aplikasi memerlukan pengesahan pengguna dan penyulitan kata laluan untuk melindungi keselamatan Data pengguna. Dalam bahasa Python, terdapat rangka kerja web yang sangat popular-Flask. Flask-Security ialah perpustakaan sambungan berdasarkan rangka kerja Flask yang membantu pembangun menambahkan dengan mudah pengesahan pengguna dan keupayaan penyulitan kata laluan pada aplikasi web Python.

Flask-Security mempunyai ciri berikut:

  • Boleh disepadukan dengan mudah ke dalam aplikasi Flask sedia ada
  • Menyokong berbilang kaedah pengesahan, termasuk kata laluan , token, log masuk media sosial , dsb.
  • Menyokong penyulitan dan penyahsulitan kata laluan (menggunakan algoritma penyulitan Bcrypt)
  • Menyediakan fungsi pengurusan peranan pengguna, yang boleh menetapkan peranan berbeza kepada pengguna yang berbeza Kawal akses pengguna kepada aplikasi anda

Dalam artikel ini, kami akan membincangkan cara menggunakan Flask-Security untuk menambah pengesahan pengguna dan keupayaan penyulitan kata laluan pada aplikasi web Python anda.

Pasang Flask-Security

Sebelum kita mula menggunakan Flask-Security, kita perlu memasangnya terlebih dahulu. Kita boleh menggunakan pip untuk memasang Flask-Security:

pip install Flask-Security

Sudah tentu, kita juga perlu memasang beberapa perpustakaan bergantung lain yang diperlukan, termasuk Flask dan Flask-SQLAlchemy (atau perpustakaan ORM lain):

pip install Flask Flask-SQLAlchemy

Mengkonfigurasi Flask-Security

Selepas memasang Flask-Security, kami perlu mengkonfigurasi beberapa parameter untuk membolehkan pengesahan pengguna dan fungsi penyulitan kata laluan. Mula-mula, kita perlu memperkenalkan perpustakaan sambungan Flask-Security ke dalam aplikasi Flask:

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

Seterusnya, kita perlu menentukan beberapa parameter konfigurasi yang diperlukan, termasuk maklumat sambungan pangkalan data, kunci, dsb.:

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

Di sini kami menggunakan SQLite sebagai pangkalan data kami dan menyimpannya dalam fail. Sudah tentu, anda juga boleh menggunakan pangkalan data lain (seperti MySQL atau PostgreSQL), cuma ubah suai maklumat sambungan pangkalan data yang sepadan.

Seterusnya, kita perlu mentakrifkan kelas Pengguna dan kelas Peranan Di sini kita menggunakan SQLAlchemy sebagai perpustakaan 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'))

Di sini, kami mentakrifkan kelas Pengguna dan kelas Peranan, dan meletakkan. Mereka dikaitkan dengan jadual pengguna_peranan masing-masing. Kami juga mentakrifkan objek user_datastore untuk mengurus maklumat pengguna dan peranan.

Seterusnya, kami perlu mengkonfigurasi parameter dan kelas yang kami takrifkan melalui pustaka sambungan Keselamatan:

security = Security(app, user_datastore)

Pada ketika ini, kami telah melengkapkan konfigurasi Flask-Security. Seterusnya, kami boleh menggunakan fungsi pengesahan pengguna dan penyulitan kata laluan dalam aplikasi Flask kami.

Gunakan Flask-Security untuk pengesahan pengguna dan penyulitan kata laluan

Sebelum menggunakan Flask-Security, kita perlu mencipta pelan tindakan Flask baharu dan mentakrifkan beberapa fungsi paparan di dalamnya untuk mengendalikan Log masuk pengguna, pendaftaran, log keluar dan operasi lain:

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')

Di sini, kami mentakrifkan tiga fungsi paparan: log masuk, log keluar dan daftar. Fungsi log masuk digunakan untuk memproses operasi log masuk pengguna, fungsi daftar digunakan untuk memproses operasi pendaftaran pengguna, dan fungsi log keluar digunakan untuk memproses operasi log keluar pengguna. Antaranya, kami menggunakan fungsi login_user dan logout_user yang disediakan oleh Flask-Security untuk melaksanakan fungsi log masuk dan log keluar pengguna. Dalam fungsi daftar, kami menggunakan fungsi user_datastore.create_user dan user_datastore.add_role_to_user untuk mencipta pengguna baharu dan menetapkannya sebagai peranan pengguna lalai.

Di sini, kami menggunakan enjin templat Flask untuk memaparkan halaman HTML Untuk butiran, sila rujuk dokumentasi enjin templat Flask.

Akhir sekali, kami perlu mendaftar pelan tindakan ini dalam aplikasi Flask kami:

app.register_blueprint(security_blueprint)

Pada ketika ini, kami telah selesai menggunakan Flask-Security. Kini, kami boleh melancarkan aplikasi Flask kami dan mengaksesnya melalui penyemak imbas.

Ringkasan

Dalam artikel ini, kami memperkenalkan cara menggunakan Flask-Security untuk menambah pengesahan pengguna dan keupayaan penyulitan kata laluan pada aplikasi web Python. Dengan mengkaji artikel ini, kita boleh memahami penggunaan asas Flask-Security dan memahami beberapa ciri dan langkah berjaga-jaganya. Dalam aplikasi sebenar, kami bebas untuk menyesuaikan dan melanjutkan fungsi Flask-Security untuk memenuhi keperluan kami.

Atas ialah kandungan terperinci Flask-Security: Menambah pengesahan pengguna dan penyulitan kata laluan pada aplikasi web Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn