Flask-Login 实现用户认证

发布于:2024-05-11 ⋅ 阅读:(139) ⋅ 点赞:(0)

Flask-Login 实现用户认证

Flask-Login 是什么

Flask-Login 是 Flask 中的一个第三方库,用于处理用户认证和管理用户会话,它提供了一组工具和功能,使得在 Flask 应用程序中实现用户认证变得更加简单和方便。

如何使用 Flask-Login
1.安装 Flask-Login:

首先,通过 pip 安装 Flask-Login:

pip install flask-login
2.设置 Flask-Login:

接下来,在Flask 应用中设置 Flask-Login。

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

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

# 在Flask应用中初始化LoginManager,用于管理登录状态
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login'

# 模拟用户数据库
users = {
    'admin': {'username': 'admin', 'password': 'password'}
}

# 创建用户类:用户类需要继承flask_login.UserMixin,这个mixin类为用户对象提供默认实现的属性和方法,如is_authenticated、is_active等
class User(UserMixin):
    pass

# 用户加载回调:Flask-Login需要知道如何加载用户。这通过定义一个回调函数实现,该函数接受用户ID,并返回对应的用户对象
@login_manager.user_loader
def user_loader(username):
    if username not in users:
        return

    user = User() # 实例化用户对象
    user.id = username  #通过将username赋值给user.id,为用户对象设置唯一标识符,以便Flask-Login能够识别和管理该用户对象
    return user

# 根路径
@app.route('/')
@login_required
def index():
    return 'Login successful'

# 登录路由:在登录视图中,验证用户的凭证。如果凭证有效,使用login_user函数来登录用户。
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        if username in users and users[username]['password'] == password:
            user = User()
            user.id = username
            login_user(user)
            return redirect(url_for('index'))
        else:
            return 'Login failed'
    return render_template('login2.html')

# 保护路由:使用@login_required装饰器来保护需要登录才能访问的视图
@app.route('/protected')
@login_required
def protected():
    return 'welcome to the protected page!'

# 登出路由:使用logout_user函数来登出用户
@app.route('/logout')
@login_required
def logout():
    logout_user()
    return 'Logged out'

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

在这个示例中,我们创建了一个 User 类,它继承自 UserMixin,这为我们提供了默认的用户认证方法。我们还定义了一个 user_loader 回调,Flask-Login 会使用它来加载用户对象。

对于登录和登出操作,我们使用了 login_user 和 logout_user 函数。login_required 装饰器用于保护视图,确保只有认证用户才能访问。

请注意,这个示例使用了一个简单的字典 users 来模拟用户数据库,并没有涉及到密码加密或存储在数据库中。在实际应用中,你应该使用数据库来存储用户信息,并且使用密码哈希来提高安全性。


网站公告

今日签到

点亮在社区的每一天
去签到