Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengesahan dan kebenaran pengguna dalam Flask

Pengesahan dan kebenaran pengguna dalam Flask

WBOY
WBOYasal
2023-06-17 18:02:052888semak imbas

Dengan penggunaan aplikasi web yang meluas, keselamatan dan perlindungan data telah menjadi isu penting dalam pembangunan aplikasi web. Untuk memastikan keselamatan aplikasi web, pengesahan dan kebenaran pengguna diperlukan. Sebagai rangka kerja pembangunan web yang popular, Flask menyediakan banyak mekanisme untuk melaksanakan pengesahan dan kebenaran pengguna.

  1. Pengesahan Pengguna

Pengesahan Pengguna merujuk kepada menggunakan kaedah pengesahan tertentu untuk menentukan sama ada identiti pengguna adalah sah apabila pengguna mengakses aplikasi web. Flask menyediakan banyak kaedah terbina dalam untuk melaksanakan pengesahan pengguna.

1.1. Pengesahan Asas HTTP

Pengesahan Asas HTTP ialah mekanisme pengesahan berdasarkan protokol HTTP, yang memerlukan pengguna memberikan nama pengguna dan kata laluan untuk pengesahan apabila meminta sumber. Flask mempunyai fungsi pengesahan asas HTTP terbina dalam, yang boleh dilaksanakan dengan mudah melalui sambungan Flask-BasicAuth.

Untuk menggunakan sambungan Flask-BasicAuth, anda perlu memasang dan mencipta objek BasicAuth dalam aplikasi Flask anda, dan kemudian menghiasinya pada fungsi penghalaan yang memerlukan pengesahan asas. Kod sampel adalah seperti berikut:

from flask import Flask
from flask_basicauth import BasicAuth

app = Flask(__name__)

app.config['BASIC_AUTH_USERNAME'] = 'username'
app.config['BASIC_AUTH_PASSWORD'] = 'password'

basic_auth = BasicAuth(app)

@app.route('/')
@basic_auth.required
def index():
    return 'Hello, World!'

Dalam kod di atas, dua item konfigurasi BasicAuth digunakan untuk menetapkan nama pengguna dan kata laluan. Penghias @basic_auth.required pada fungsi penghalaan melaksanakan fungsi pengesahan asas.

1.2. Pengesahan Borang

Pengesahan borang ialah salah satu kaedah pengesahan yang paling biasa dalam aplikasi web. Melaksanakan pengesahan borang dalam Flask secara amnya memerlukan penggunaan sambungan Flask-Login.

Pelanjutan Flask-Login menyediakan kelas UserMixin yang boleh digunakan untuk mewakili model data pengguna. Kod sampel adalah seperti berikut:

from flask_login import UserMixin

class User(UserMixin):
    def __init__(self, id, username, password):
        self.id = id
        self.username = username
        self.password = password

    def get_id(self):
        return str(self.id)

Dalam kod sampel, kelas Pengguna mewarisi daripada kelas flask_login.UserMixin, yang mengandungi kaedah pengesahan pengguna yang biasa digunakan. Dalam sambungan Flask-Login, anda juga perlu menyediakan fungsi pemuatan pengguna untuk memuatkan data pengguna. Kod sampel adalah seperti berikut:

from flask_login import login_user, LoginManager
from flask import Flask, render_template, redirect, url_for
from werkzeug.security import generate_password_hash, check_password_hash

app = Flask(__name__)
app.secret_key = 'your secret key'

login_manager = LoginManager(app)

# 用户数据
users = {
    1: {'username': 'user1', 'password': 'password1'},
    2: {'username': 'user2', 'password': 'password2'},
    3: {'username': 'user3', 'password': 'password3'},
}

# 实现用户加载函数
@login_manager.user_loader
def load_user(user_id):
    user = users.get(int(user_id))
    if user:
        return User(user_id, user['username'], user['password'])
    return None

# 实现登录视图
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        for user_id, user_data in users.items():
            if user_data['username'] == username and check_password_hash(user_data['password'], password):
                user = User(user_id, username, password)
                login_user(user)
                return redirect(url_for('index'))
        return 'Invalid username/password combination'
    return render_template('login.html')

# 实现需要登录才能访问的视图
@app.route('/')
@login_required
def index():
    return 'Hello, World!'

Dalam kod sampel, menggunakan sambungan Flask-Login memerlukan memulakan aplikasi Flask dan menetapkan secret_key, dan kemudian melaksanakan fungsi pemuatan pengguna melalui penghias login_manager.user_loader. Akhir sekali, kawalan log masuk boleh dicapai dengan menggunakan penghias @login_required pada fungsi paparan yang memerlukan log masuk untuk mengakses.

  1. Keizinan pengguna

Keizinan pengguna merujuk kepada menentukan pengguna yang boleh mengakses sumber mana. Melaksanakan kebenaran pengguna dalam Flask memerlukan penggunaan sambungan Flask-Principal.

Pelanjutan Flask-Principal menyediakan tiga kelas: Kebenaran, Peranan dan Identiti, yang boleh digunakan untuk menentukan kebenaran pengguna untuk mengakses sumber. Kebenaran mewakili kebenaran untuk meminta akses kepada sumber, Peranan mewakili identiti atau kumpulan pengguna, dan Identiti mewakili maklumat identiti pengguna.

Kod sampel adalah seperti berikut:

from flask_principal import Principal, Identity, AnonymousIdentity, Permission, RoleNeed

app = Flask(__name__)

principal = Principal(app)

# 定义角色,这里假设有管理员和普通用户两种角色
admin_role = RoleNeed('admin')
user_role = RoleNeed('user')

# 定义权限
admin_permission = Permission(admin_role)
user_permission = Permission(user_role)

# 定义 Identity,需要通过 Identity 的认证才能访问需要权限管理的路由
@app.before_request
def before_request():
    identity = Identity(anonymous=True)
    if current_user.is_authenticated:
        identity = Identity(current_user.id)
        if current_user.is_admin:
            identity.provides.add(admin_role)
        else:
            identity.provides.add(user_role)
    principal.identity = identity

# 在需要受权限控制的路由上使用 requires(permission) 装饰器
@app.route('/admin')
@admin_permission.require(http_exception=403)
def admin_index():
    return 'Hello, Admin!'

@app.route('/user')
@user_permission.require(http_exception=403)
def user_index():
    return 'Hello, User!'

Dalam kod sampel, dua Peranan ditakrifkan, iaitu admin_role dan user_role. Setiap Peranan boleh menentukan Kebenaran, yang digunakan untuk mengawal kebenaran yang diperlukan untuk akses operasi yang berkaitan. Dalam fungsi before_request, Pengesahan Identiti dilaksanakan dan Peranan berbeza ditambah mengikut situasi tertentu. Kawalan kebenaran boleh dicapai dengan menggunakan penghias memerlukan(permission) pada laluan yang memerlukan pengurusan kebenaran.

Flask menyediakan banyak kaedah untuk melaksanakan pengesahan dan kebenaran pengguna. Menguasai kaedah ini boleh membantu pembangun meningkatkan keselamatan aplikasi web. Pada masa yang sama, pembangun juga perlu mempertimbangkan dengan teliti kaedah mana yang hendak digunakan untuk melaksanakan pengesahan dan kebenaran pengguna bagi memastikan keselamatan aplikasi dan perlindungan data pengguna.

Atas ialah kandungan terperinci Pengesahan dan kebenaran pengguna dalam Flask. 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