首页 >后端开发 >Python教程 >如何使用烧瓶-login执行用户身份验证

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

Lisa Kudrow
Lisa Kudrow原创
2025-02-09 08:47:13421浏览

如何使用烧瓶-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