目录
>先决条件
入门
创建数据库
如何使用Blask-bcrypt
创建寄存器视图
这是代码如何工作的细分:
>用户会话是一个系统,用于在用户登录时跟踪和更新用户信息。Flask-Login通过在用户的浏览器上存储会话cookie来管理这些会话。会话cookie是一小部分数据,其中包含用于用户会话的唯一标识符。
首页 后端开发 Python教程 如何使用烧瓶-login执行用户身份验证

如何使用烧瓶-login执行用户身份验证

Feb 09, 2025 am 08:47 AM

如何使用烧瓶-login执行用户身份验证

>在本文中,我们将查看Blask-Login提供的各种功能以及如何使用它们为您的Web应用程序创建安全的用户登录功能。到本文结尾,您将对如何在烧瓶应用程序中实现安全用户身份验证有很好的了解。

> 身份验证是任何Web应用程序的重要组成部分,允许用户访问数据或资源,因为它可以确保只有合适的人才能访问敏感信息。这也可以在烧瓶中使用烧瓶。

>

钥匙要点

用烧瓶 - 燃料蛋白:烧瓶 - 燃料蛋白简化身份验证,简化了在烧瓶应用程序中的用户身份验证的实现。它提供了必不可少的功能,例如用户会话管理,轻松登录/注销功能以及与数据库无缝集成的用户加载程序回调。这有助于有效地管理用户会话并处理身份验证过程。

>
    安全密码处理和用户会话管理:我们将使用烧瓶-bcrypt详细介绍密码安全性在哈希密码中,以及Blask-Login如何通过会话cookie管理用户会话。这样可以确保用户凭据被安全存储并准确跟踪用户会话,从而增强了应用程序的整体安全性。
  • 实际实施指南:我们提供了一个综合指南,以设置和使用烧瓶login,包括创建用户模型,配置数据库(SQLITE),为用户注册和登录创建视图,并使用受保护的路由实现注销逻辑。它提供了一种实用的方法,可以在烧瓶应用程序中构建安全的用户身份验证系统,即使对于那些新的烧瓶或Web应用程序开发的人也可以访问。
  • >
  • 为什么使用烧瓶 - login?
  • 烧瓶login具有许多功能和功能,可轻松在烧瓶应用程序中无缝执行身份验证。以下是使用烧瓶 - login的一些好处:
  • >用户会话管理。 Blask-Login处理用户会议的创建和破坏。它还可以将当前用户的ID存储在会话中,以便您可以轻松地检查用户是否已登录。
  • >
  • 登录和注销功能。烧结仪提供内置的登录和注销功能。这些功能负责所有重要的过程,例如创建和破坏会话并将用户重定向到适当的页面。
  • >用户加载程序回调。 Blask-Login允许您定义用户加载程序回调。此回调用于为当前会话加载用户对象。如果您使用数据库来存储用户信息,这将很有用。
  • 身份验证和授权。 Blask-Login使您可以轻松地在您的应用程序中实现身份验证和授权。您可以使用烧瓶login来保护特定的页面或路线,并授予用户对应用程序的不同级别访问。

>先决条件

要遵循本文的长期,您需要以下内容:

>
  • python和烧瓶语法的知识
  • html和CSS
  • 的基本知识
  • python版本3和安装烧瓶

显然,您还需要访问Web浏览器。

入门

为了充分利用烧瓶登录模块,我们需要安装烧瓶login和其他必要的依赖项。这些库提供了改善应用程序功能所需的必要功能和工具。要安装它们,请打开命令提示符或终端并执行以下pip命令:>

这是这些库中每个库中的内容的细分:>
pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
登录后复制
登录后复制
登录后复制
登录后复制
flask-bcrypt:添加bcrypt hashing以供密码安全

  • >安装完成后,它将在您使用的目录中自动下载烧瓶登录。
  • >
  • 注意:在撰写本文时,解决最新版本的Blask和Werkzeug中的依赖项存在一个小问题。要解决此问题,您必须强制安装Werkzeug版本2.3.0版本,因为它是唯一已知的版本。
  • >安装了依赖项后,您需要使用烧瓶应用程序初始化它们:

在上面的代码段中,我们还初始化了应用程序中的LoginManager对象。 LoginManager是烧瓶 - login的扩展,用于设置用于处理用户会话的必要配置。

创建用户模型 模型是您要在应用程序中使用的数据结构的表示。它定义了如何在系统中组织,存储和操纵数据。通常,模型与事先遵循定义结构的数据库一起使用。对于我们的应用程序,我们有以下数据:

>
  • 唯一的ID
  • >用户名
  • >密码(哈希)
pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
登录后复制
登录后复制
登录后复制
登录后复制

>您还可以根据您的项目范围添加其他属性,例如电子邮件地址或个人资料图片。

创建数据库

>定义用户模型后,您需要创建一个数据库,该数据库将存储我们在上一个模型中创建的数据结构。 在本文中,我们将使用SQLite数据库。这是因为SQLITE是轻巧且无服务器的数据库引擎。这使设置和使用易于使用,因为它不需要单独的安装。对于中小型应用程序,这也是一个不错的选择。

>

这是我们应用程序中使用SQLITE数据库的步骤的细分:>

>使用SQLite数据库,您必须在烧瓶应用程序配置中设置URI。这通常是在顶部和其他配置一起完成的。这是您可以使用的片段:

在此片段中,/// ...指示文件的相对路径 - site.db-这是我们用于SQLITE数据库文件的名称。此名称可以更改为您喜欢的任何东西。
  1. >
    <span>from flask_sqlalchemy import SQLAlchemy
    </span>
    <span>from flask_login import UserMixin, LoginManager, login_user, logout_user, login_required
    </span>
    <span>from flask_bcrypt import Bcrypt
    </span>
    <span>from flask_login import LoginManager
    </span> app <span>= Flask(__name__)
    </span>
    login_manager <span>= LoginManager()
    </span>
    login_manager<span>.init_app(app)  </span>
    登录后复制
    登录后复制
    登录后复制
    接下来,您必须使用此片段初始化烧瓶-Sqlalchemy Orm:

    > sqlalchemy是一种对象凝聚的映射器,提供了一组使用Python使用数据库的工具。行DB = SQLALCHEMY(APP)创建了SQLalchemy类的实例,并将其绑定到您的烧瓶应用程序(App)。
  2. 为了创建此数据库,我们必须使用Create_all方法初始化数据库:
  3. <span>class User(UserMixin):
    </span>
    <span>id = db.Column(db.Integer, primary_key=True)
    </span>username <span>= db.Column(db.String(64), unique=True)
    </span>password_hash <span>= db.Column(db.String(128))
    </span>
    <span>def __repr__(self):
    </span>  <span>return <span>f'<User <span>{self.username}</span>>'</span></span>
    登录后复制
    登录后复制
    登录后复制
    此代码通常放置在Python脚本的末尾或用于初始化数据库的单独脚本中。运行脚本后,将根据我们先前定义的模型创建数据库文件。

    在这种情况下,如果尚不存在,则代码将使用用户表创建一个site.db文件。 site.db文件通常包含在一个名为 /instance /。

    的文件夹中
  4. app<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>
    登录后复制
    登录后复制
    登录后复制

    接下来,我们需要创建一个使用用户ID并返回相应用户对象的User_loader。这是一个示例:

    如何使用烧瓶-login执行用户身份验证>密码哈希

  5. 密码哈希是一种安全措施,它在将用户密码存储在数据库中之前存储了密码的加密表示。这样,即使应用程序的安全性损害了,也很难获取实际密码。
>

>通常,密码首先在注册过程中进行哈希,并存储在数据库中。然后,每次用户登录时,它们的密码再次被哈希进行了哈希,并将其与数据库中存储的Hashed密码进行了比较。如果两个密码匹配,则对用户进行身份验证并访问了该应用程序。

>

如何使用Blask-bcrypt

进行哈希和验证密码

烧瓶具有称为烧瓶-bcrypt的扩展名,可帮助实现此功能。它具有两个主要功能:generate_password_hash()和check_password_hash()。

> theGenerate_password_hash()函数将用户的密码作为参数并返回哈希密码。这通常在注册逻辑中使用。

>

> check_password_hash()函数将密码和哈希密码作为参数,如果两个密码匹配,则返回true,或者如果不匹配,则false。在授予登录视图

>之前,这是调用的

创建寄存器视图

>视图是用于生成HTML,JSON或发送给用户浏览器的其他数据的烧瓶框架的一部分。在此代码段中,我们将创建一个视图,该视图接受用户的输入,并将详细信息添加到数据库中:

pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
登录后复制
登录后复制
登录后复制
登录后复制

这是代码的分解:>

在第一行,我们为URL路径 /登录定义了路由。该路线接受get和发布请求。与路由关联的登录()函数将在提出请求时执行。
    >
  • 接下来,我们确认请求方法是否是邮政方法:
  • 确认后,该函数会以登录表单检索用户输入的值:
    <span>from flask_sqlalchemy import SQLAlchemy
    </span>
    <span>from flask_login import UserMixin, LoginManager, login_user, logout_user, login_required
    </span>
    <span>from flask_bcrypt import Bcrypt
    </span>
    <span>from flask_login import LoginManager
    </span> app <span>= Flask(__name__)
    </span>
    login_manager <span>= LoginManager()
    </span>
    login_manager<span>.init_app(app)  </span>
    登录后复制
    登录后复制
    登录后复制

    然后,它查询使用提供的用户名的用户数据库。如果找到了带有所提供用户名的用户并匹配密码,则将执行此块内的代码。
    <span>class User(UserMixin):
    </span>
    <span>id = db.Column(db.Integer, primary_key=True)
    </span>username <span>= db.Column(db.String(64), unique=True)
    </span>password_hash <span>= db.Column(db.String(128))
    </span>
    <span>def __repr__(self):
    </span>  <span>return <span>f'<User <span>{self.username}</span>>'</span></span>
    登录后复制
    登录后复制
    登录后复制
  • 创建登录视图
  • 在登录视图中,我们创建了一个逻辑,该逻辑接受从页面上接受输入,然后检查输入是否匹配数据库中的任何行:

这是代码如何工作的细分:

在第一行 - @app.route(' /login',methods = ['get','post']): - 我们正在使用定义URL路径路由的装饰器。该路线接受get和发布请求。当向该路由提出请求时,将执行关联的功能,login()。
app<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>
登录后复制
登录后复制
登录后复制
login()函数首先检查请求方法是否是发布:

>一次,它已确认它是邮政请求,它以登录表单检索用户输入的值:
    pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    然后,它对提供的用户名的用户查询数据库:
  • <span>from flask_sqlalchemy import SQLAlchemy
    </span>
    <span>from flask_login import UserMixin, LoginManager, login_user, logout_user, login_required
    </span>
    <span>from flask_bcrypt import Bcrypt
    </span>
    <span>from flask_login import LoginManager
    </span> app <span>= Flask(__name__)
    </span>
    login_manager <span>= LoginManager()
    </span>
    login_manager<span>.init_app(app)  </span>
    登录后复制
    登录后复制
    登录后复制
  • 如果验证了用户名和密码,则使用Blask-Login的login_user和重定向功能授予用户访问:
  • <span>class User(UserMixin):
    </span>
    <span>id = db.Column(db.Integer, primary_key=True)
    </span>username <span>= db.Column(db.String(64), unique=True)
    </span>password_hash <span>= db.Column(db.String(128))
    </span>
    <span>def __repr__(self):
    </span>  <span>return <span>f'<User <span>{self.username}</span>>'</span></span>
    登录后复制
    登录后复制
    登录后复制
    但是,如果请求方法未发布或详细信息不正确,则将登录。html模板:
  • 本质上,它可以检查输入的凭据是否有效,将用户记录在其中,并将其重定向到欢迎页面,如果成功。如果登录不成功或是GET请求,则它将为用户输入其凭据。
  • app<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>
    登录后复制
    登录后复制
    登录后复制
    >使用受保护的视图创建注销逻辑

    在大多数应用程序中,如果没有登录用户,则某些页面是无法访问的。这包括交易历史记录,草稿和注销页面等页面。 Blask-Login提供了一种使用login_required Decorator限制对身份验证用户的访问的方便方法。这是其工作原理的细分。

  • 要利用此功能,您必须从烧瓶 - login中导入login_required Decorator:

    接下来,您必须将login_required Decorator添加到要保护的任何路线中。例如,让我们创建一个只有在用户登录时才能访问的注销页面:

    >

    以下是其工作原理的细分:

    >

    db <span>= SQLAlchemy(app)</span>
    登录后复制
    >就像在登录视图中, @app.route(' /lokout')定义了url路径 /注销的路由。

    接下来,我们添加一个login_required装饰器,该装饰器可确保必须登录用户才能访问注销路由。如果未登录用户并尝试访问此路线,则将其重定向到登录页面。
    <span>if __name__ == '__main__':
    </span>
    db<span>.create_all()
    </span>
    app<span>.run(debug=True)</span>
    登录后复制
    在注销函数中,logout_user()被调用。此功能由烧瓶 - login提供,用于记录当前用户。>

    登录用户后,该功能将其重定向到使用重定向(url_for('login'))。

      >因此,当用户访问 /注销路由时,烧瓶 - login确保它们已登录(@login_required),将其注销并将其重定向到登录页面。这有助于安全地处理烧瓶应用程序中的用户注销。 login_required Decorator应用于 /受保护的路线,表明只有身份验证的用户才能访问它。如果用户试图访问受保护的页面而不登录,则烧瓶将其重定向到登录页面。
    • 添加模板
    • 瓶中的
    • 模板允许您使用HTML页面来定义网站的外观。要在我们的app.py文件中充分实现逻辑,我们将创建下图所示的html页面。
    • >
    下面的动画显示了模板如何呈现我们网站的不同页面。

    >您可以看到本教程的完整代码,并在本文的GitHub存储库中了解有关其实现的更多信息。 flask-login如何通过用户会话cookie

    管理用户会话

    >用户会话是一个系统,用于在用户登录时跟踪和更新用户信息。Flask-Login通过在用户的浏览器上存储会话cookie来管理这些会话。会话cookie是一小部分数据,其中包含用于用户会话的唯一标识符。

    >

    用户使用烧瓶login登录到网站时,服务器会生成会话cookie并将其发送给用户的浏览器。浏览器存储会话cookie,并将其包含在服务器的所有请求中。服务器使用会话cookie识别用户及其会话状态。

    > 例如,如果用户已登录并访问受烧瓶login保护的页面,则Blask-Login将检查会话cookie,以查看用户是否已验证。如果用户经过身份验证,则烧瓶login将从数据库中加载用户的个人资料信息,并将其用于视图。如果未对用户进行身份验证,则烧瓶-login将将用户重定向到登录页面。

    >用户登录网站时,服务器从用户的浏览器中删除了会话cookie,该浏览器终止了用户会话。

    结论

    烧瓶提供了各种功能,可以解决身份验证的不同方面,从用户会话管理到授权。通过使用这些功能,您可以实现适合应用程序特定需求的健壮且安全的身份验证系统。

    以上是如何使用烧瓶-login执行用户身份验证的详细内容。更多信息请关注PHP中文网其他相关文章!

    本站声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驱动的应用程序,用于创建逼真的裸体照片

    AI Clothes Remover

    AI Clothes Remover

    用于从照片中去除衣服的在线人工智能工具。

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Clothoff.io

    Clothoff.io

    AI脱衣机

    Video Face Swap

    Video Face Swap

    使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

    热工具

    记事本++7.3.1

    记事本++7.3.1

    好用且免费的代码编辑器

    SublimeText3汉化版

    SublimeText3汉化版

    中文版,非常好用

    禅工作室 13.0.1

    禅工作室 13.0.1

    功能强大的PHP集成开发环境

    Dreamweaver CS6

    Dreamweaver CS6

    视觉化网页开发工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神级代码编辑软件(SublimeText3)

    热门话题

    Java教程
    1655
    14
    CakePHP 教程
    1413
    52
    Laravel 教程
    1306
    25
    PHP教程
    1252
    29
    C# 教程
    1226
    24
    Python vs.C:申请和用例 Python vs.C:申请和用例 Apr 12, 2025 am 12:01 AM

    Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。 Python以简洁和强大的生态系统着称,C 则以高性能和底层控制能力闻名。

    Python:游戏,Guis等 Python:游戏,Guis等 Apr 13, 2025 am 12:14 AM

    Python在游戏和GUI开发中表现出色。1)游戏开发使用Pygame,提供绘图、音频等功能,适合创建2D游戏。2)GUI开发可选择Tkinter或PyQt,Tkinter简单易用,PyQt功能丰富,适合专业开发。

    您可以在2小时内学到多少python? 您可以在2小时内学到多少python? Apr 09, 2025 pm 04:33 PM

    两小时内可以学到Python的基础知识。1.学习变量和数据类型,2.掌握控制结构如if语句和循环,3.了解函数的定义和使用。这些将帮助你开始编写简单的Python程序。

    2小时的Python计划:一种现实的方法 2小时的Python计划:一种现实的方法 Apr 11, 2025 am 12:04 AM

    2小时内可以学会Python的基本编程概念和技能。1.学习变量和数据类型,2.掌握控制流(条件语句和循环),3.理解函数的定义和使用,4.通过简单示例和代码片段快速上手Python编程。

    Python与C:学习曲线和易用性 Python与C:学习曲线和易用性 Apr 19, 2025 am 12:20 AM

    Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

    Python:探索其主要应用程序 Python:探索其主要应用程序 Apr 10, 2025 am 09:41 AM

    Python在web开发、数据科学、机器学习、自动化和脚本编写等领域有广泛应用。1)在web开发中,Django和Flask框架简化了开发过程。2)数据科学和机器学习领域,NumPy、Pandas、Scikit-learn和TensorFlow库提供了强大支持。3)自动化和脚本编写方面,Python适用于自动化测试和系统管理等任务。

    Python和时间:充分利用您的学习时间 Python和时间:充分利用您的学习时间 Apr 14, 2025 am 12:02 AM

    要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

    Python:自动化,脚本和任务管理 Python:自动化,脚本和任务管理 Apr 16, 2025 am 12:14 AM

    Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

    See all articles