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

Flask中使用flask_login.current_user实现用户认证与授权功能的实例

发布时间:2023-12-24 23:22:52

Flask-Login是一个用于Flask应用程序的用户认证和授权插件。它通过使用会话(即cookie)来跟踪当前已登录用户,并提供了一组方便的装饰器和函数来实现用户认证和授权功能。在这里,我将为你提供一个使用flask_login.current_user实现用户认证与授权功能的示例。

首先,你需要安装Flask-Login。可以通过运行以下命令来安装:

pip install flask-login

接下来,让我们创建一个简单的Flask应用程序。

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

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key' # 设置一个秘钥用于加密cookie

# 初始化Flask-Login
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login' # 设置登录页面的路由


# 创建一个简单的用户模型
class User(UserMixin):
    def __init__(self, username):
        self.username = username

    def __repr__(self):
        return self.username


# 定义一个用户加载函数,用于从用户标识符中加载用户对象
@login_manager.user_loader
def load_user(user_id):
    return User.query.get(user_id)


# 创建几个简单的路由
@app.route('/')
def index():
    return 'Hello, World!'


@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['username']
        password = request.form['password']

        # 假设我们有一个用户数据库,并检查用户凭据
        # 如果用户存在,使用用户对象登录,并将其重定向到主页
        user = User.query.filter_by(username=username).first()
        if user and password == 'password':
            login_user(user)
            return redirect(url_for('index'))

        # 如果用户不存在或凭据不正确,返回登录页面
        return render_template('login.html')

    # 如果请求是GET方法,返回登录页面
    return render_template('login.html')


@app.route('/logout')
@login_required # 需要用户登录才能访问的路由
def logout():
    logout_user()
    return redirect(url_for('index'))


@app.route('/profile')
@login_required
def profile():
    return f'Welcome, {current_user.username}!'


if __name__ == '__main__':
    app.run()

在这个示例中,我们首先导入了必要的类和函数。然后,我们创建了一个简单的Flask应用程序,并设置了一个秘钥用于加密cookie。

接下来,我们定义了一个简单的用户模型类User,它继承自UserMixin,并实现了必要的方法。我们还定义了一个用户加载函数load_user,用于从用户标识符中加载用户对象。

然后,我们初始化了LoginManager并将其绑定到应用程序。我们设置了一个登录页面的路由,并将login_manager.login_view参数设置为该路由。这样,当未经授权的用户尝试访问需要授权的页面时,Flask-Login将自动重定向到登录页面。

接下来,我们定义了几个简单的路由。index路由返回一个简单的欢迎消息。login路由处理登录请求,并在验证用户凭据后将用户登录。logout路由处理注销请求,并将用户注销。profile路由显示当前登录用户的用户名。

其中,@login_required是一个装饰器,用于需要用户登录才能访问的路由。如果未登录用户尝试访问这些路由,Flask-Login将自动重定向到登录页面。

通过使用current_user全局变量,我们可以轻松地获取当前已登录的用户对象。我们可以在路由处理函数中使用它来获取当前用户的信息。

最后,我们在__name__ == '__main__'部分运行应用程序。

这就是使用flask_login.current_user实现用户认证与授权功能的示例。当用户登录后,我们可以轻松地访问和使用current_user来执行各种授权操作,如显示用户信息、限制访问等。希望这个示例对你有所帮助!