欢迎访问宙启技术站
智能推送

在Flask应用中使用flask_login.current_user实现用户身份验证和授权

发布时间:2024-01-10 09:01:03

Flask-Login是一个为Flask应用程序提供用户身份验证和授权功能的插件。它通过使用Session和Cookie来跟踪已验证用户,并提供了一个current_user对象,用于表示当前登录的用户。

下面是一个使用Flask-Login进行用户身份验证和授权的示例:

首先,安装Flask-Login模块:

pip install flask-login

然后,在Flask应用程序中导入Flask-Login和其他必要的模块:

from flask import Flask, render_template, redirect, url_for
from flask_login import LoginManager, login_user, logout_user, login_required, current_user User, Role

创建Flask应用程序实例,并设置一个密钥(用于签署和验证Cookie):

app = Flask(__name__)
app.secret_key = 'your_secret_key'

创建一个LoginManager对象,并将其初始化为app的一部分:

login_manager = LoginManager(app)

定义一个回调函数,用于加载和返回用户对象:

@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))

下面是一个User类的示例,它表示应用程序中的用户:

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(100), unique=True, nullable=False)
    password = db.Column(db.String(100), nullable=False)
    role_id = db.Column(db.Integer, db.ForeignKey('role.id'), nullable=False)

    role = db.relationship('Role', backref=db.backref('users', lazy=True))

定义一个视图函数,用于处理用户登录:

@app.route('/login', methods=['GET', 'POST'])
def login():
    if current_user.is_authenticated:
        return redirect(url_for('home'))

    if request.method == 'POST':
        username = request.form.get('username')
        password = request.form.get('password')

        user = User.query.filter_by(username=username).first()

        if user and user.password == password:
            login_user(user)
            return redirect(url_for('home'))
        else:
            flash('Invalid username or password', 'error')
  
    return render_template('login.html')

定义一个视图函数,用于处理用户注销:

@app.route('/logout')
@login_required
def logout():
    logout_user()
    return redirect(url_for('login'))

定义一个需要用户登录才能访问的视图函数:

`python

@app.route('/home')