利用Flask-Login的current_user实现用户认证和权限校验
发布时间:2024-01-10 09:06:23
Flask-Login是一个Flask扩展,用于处理用户认证和权限校验。它提供了一个current_user变量,用于获取当前登录用户的信息,以便进行认证和权限检查。
下面是一个使用Flask-Login实现用户认证和权限校验的示例:
1. 安装Flask-Login:
pip install Flask-Login
2. 导入必要的模块:
from flask import Flask, render_template, redirect, url_for from flask_login import LoginManager, login_user, logout_user, login_required, current_user
3. 创建Flask应用程序和配置:
app = Flask(__name__) app.config['SECRET_KEY'] = 'your_secret_key' login_manager = LoginManager() login_manager.init_app(app)
4. 创建User模型类用于存储用户信息:
class User:
def __init__(self, username, password):
self.username = username
self.password = password
def get_id(self):
return self.username
@staticmethod
def get(username):
if username == 'admin':
return User('admin', 'password')
5. 实现用户登录和注销功能:
@login_manager.user_loader
def load_user(username):
return User.get(username)
@app.route('/login', methods=['GET', 'POST'])
def login():
if current_user.is_authenticated:
return redirect(url_for('index'))
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
user = User.get(username)
if user and user.password == password:
login_user(user)
return redirect(url_for('index'))
flash('Invalid username or password')
return render_template('login.html')
@app.route('/logout')
@login_required
def logout():
logout_user()
return redirect(url_for('login'))
6. 实现需要登录的页面和权限校验:
@app.route('/')
@login_required
def index():
return 'Hello, {}!'.format(current_user.username)
@app.route('/admin')
@login_required
def admin():
if current_user.username == 'admin':
return 'Welcome, administrator!'
else:
return 'Access denied'
在上面的示例中,User模型类中实现了一个get方法,用于根据用户名获取用户对象。登录功能通过login_user函数将用户对象添加到会话中,注销功能通过logout_user函数将用户对象从会话中删除。@login_required装饰器用于保护需要登录的视图函数。当前登录用户的信息可通过current_user变量访问。
使用Flask-Login可以非常方便地实现用户认证和权限校验。在实际应用中,可能需要根据具体的业务需求,对User模型类进行更完善的设计,例如加入角色、权限等信息。
