Flask-Login 实现用户认证

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 来模拟用户数据库,并没有涉及到密码加密或存储在数据库中。在实际应用中,你应该使用数据库来存储用户信息,并且使用密码哈希来提高安全性。

相关推荐

  1. Flask-Login 实现用户认证

    2024-05-11 13:54:03       13 阅读
  2. flask不使用flask-login插件

    2024-05-11 13:54:03       35 阅读
  3. flask web 学习之用户认证与会话管理

    2024-05-11 13:54:03       34 阅读
  4. 第4天:用户认证系统实现

    2024-05-11 13:54:03       10 阅读
  5. Ceph学习 -9.认证管理-用户实践

    2024-05-11 13:54:03       17 阅读
  6. flask 请求勾子实现 request_auth认证

    2024-05-11 13:54:03       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-11 13:54:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-11 13:54:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-11 13:54:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-11 13:54:03       20 阅读

热门阅读

  1. 投影与降维

    2024-05-11 13:54:03       13 阅读
  2. npm入门介绍

    2024-05-11 13:54:03       13 阅读
  3. 关于OpenJDK的学习笔记

    2024-05-11 13:54:03       15 阅读
  4. Python面试题【数据结构和算法部分101-130】

    2024-05-11 13:54:03       11 阅读
  5. 【Qt】QStandardItem更新数据注意事项

    2024-05-11 13:54:03       15 阅读
  6. mysql5.7.44误删除数据后,使用binlog日志恢复

    2024-05-11 13:54:03       15 阅读
  7. UDP socket编程示例

    2024-05-11 13:54:03       12 阅读
  8. 已经声明,但提示“未声明的标识符”

    2024-05-11 13:54:03       13 阅读
  9. 探索前端技术的未来:新兴工具与框架的引领

    2024-05-11 13:54:03       11 阅读
  10. C#[数据结构]之数组

    2024-05-11 13:54:03       11 阅读
  11. Three.js的材质Material信息

    2024-05-11 13:54:03       9 阅读
  12. 富格林:采取可信策略谨防欺诈

    2024-05-11 13:54:03       10 阅读
  13. GO 使用get请求数据

    2024-05-11 13:54:03       8 阅读
  14. 跨国公司软件项目经理的心得体会

    2024-05-11 13:54:03       10 阅读