Flask-Login密码重置

37

我正在使用flask-login库,但是我无法找到有关如何允许用户通过电子邮件重置其密码的好的教程或文档。在这方面,我可以查看哪些方向/资源?彻底的Google搜索没有找到任何有用的内容。

3个回答

37

基本逻辑:

  1. 创建带有电子邮件字段的重置密码表单。
  2. 当用户提交表单时,您应该:
    1. 检查数据库中是否存在此电子邮件
    2. 生成不可辨认的加密随机秘钥(下一个是秘钥)
    3. 将此秘钥、当前时间戳和用户标识符存储到缓存或数据库中
    4. 将其发送到用户电子邮件或短信
  3. 当用户使用秘钥(例如通过url或特殊表单)时,您应该:
    1. 验证它(存在、未过期、以前未使用过)
    2. 获取用户标识符
    3. 删除或标记为使用当前秘钥
    4. 提供输入/生成新密码的逻辑。

输入/生成密码的逻辑可以是不同的:

  1. 登录用户并显示输入新密码的表单-一次性登录密钥
  2. 显示输入密码的表单,然后登录(如果有效)
  3. 生成新密码并将其发送到用户电子邮件
  4. 为输入新密码的表单生成新的秘钥,并将其发送给用户电子邮件
  5. 生成用于批准表单的新秘钥,通过短信发送,显示输入新密码和批准秘钥的表单,然后登录(如果有效)

很棒的回答。使用Flask-Security使我的工作变得更轻松,因为我不需要从头开始编写任何东西,但这种方法肯定是有用的。 - Jason B
这是一个非常好的回答,通常缺乏文档来学习如何从头开始做这样的事情。 - Mojimi

32
flask-login 不负责处理重置密码邮件等其他相关事项,它只是用于管理会话和 cookies。
您应该使用 Flask-Security,它可以为 Flask 添加密码重置功能和其他常见的安全相关功能。Flask-Security 使用 flask-login 来处理会话,但在此基础上增加了其他功能以完善安全功能:

电子邮件确认

如果需要,您可以要求新用户确认其电子邮件地址。Flask-Security 将向任何新用户发送带有确认链接的电子邮件消息。在导航到确认链接后,用户将自动登录。还有一个视图可重新发送给定电子邮件的确认链接,如果用户尝试使用已过期的令牌或丢失了以前的邮件,则可以使用该视图。确认链接可以配置为在指定时间后过期。

密码重置 / 恢复

当用户忘记其密码时,可以使用密码重置和恢复功能。Flask-Security 向用户发送一封电子邮件,其中包含他们可以重置密码的链接视图。一旦密码重置,他们就会自动登录,并可以从那时起使用新密码。密码重置链接可以配置为在指定时间后过期。

用户注册

Flask-Security 随附了一个基本的用户注册视图。此视图非常简单,新用户只需要提供电子邮件地址和密码即可。如果您的注册过程需要更多字段,则可以覆盖此视图。


5

Flask-Login仅为Flask提供用户会话管理。它处理登录、注销和记住您的用户会话等常见任务,但不包括重置密码、更改密码、电子邮件确认等。

Flask-security是完成这些任务的最佳且易于使用的选项。它几乎可以处理所有事情,但它目前没有得到积极维护。

注意 该项目已不再得到维护。请考虑 Flask-Security-Too 作为替代方案。-- 来自flask-security Github repo

因此,我推荐使用 Flask-Security-Too 库,这是改进版本并得到积极维护。它还具有更多功能,例如2FA身份验证、统一登录等。

您可以使用pip进行安装。

 pip install flask-security-too flask-sqlalchemy

并导入像

from flask-security import current_user, login_required

Flask-Security repoexamples directory目录中有一些完整(但简单)的示例可用。

文档:https://flask-security-too.readthedocs.io/en/stable/index.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接