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