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

利用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模型类进行更完善的设计,例如加入角色、权限等信息。