Flask-Login密码重置

时间:2014-04-13 06:07:40

标签: flask flask-sqlalchemy flask-login

我正在使用flask-login库,而且我还没有找到关于如何允许用户通过电子邮件重置密码的任何好的教程或文档。我可以看到哪些方向/资源如何做到这一点?彻底的谷歌搜索并没有发现任何有用的东西。

3 个答案:

答案 0 :(得分:20)

flask-login不会处理重置密码电子邮件和其他类似的事情。它就在那里管理会话和cookie。

您应该使用Flask-Security添加密码重置功能和其他常见的安全相关功能。 Flask-Security使用flask-login来处理会话,但在顶部添加了其他功能以完善安全功能:

  

电子邮件确认

     

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

     

密码重置/恢复

     

当用户忘记密码时,密码重置和恢复可用   或她的密码。 Flask-Security通过链接向用户发送电子邮件   他们可以重置密码的视图。一旦密码是   重置它们会自动登录并可以使用新密码   从那时起。密码重置链接可以配置为在a之后过期   指定的时间。

     

用户注册

     

Flask-Security随附基本用户注册视图。   此视图非常简单,新用户只需提供电子邮件   地址和密码。如果你的话,这个观点可以被覆盖[原文如此]   注册过程需要更多的领域。

答案 1 :(得分:15)

基础逻辑:

  1. 使用email字段创建重置密码表单。
  2. 当用户提交表单时,您应该:
    1. 查看数据库中的此电子邮件
    2. 生成无差别的加密随机密钥(下一个只是密钥)
    3. 将此密钥,当前时间戳和用户标识符存储到缓存或数据库
    4. 将其发送至用户电子邮件或短信
  3. 当用户应用密钥(例如使用网址或特殊表格)时,您应该:
    1. 验证它(存在,未过期,之前未使用)
    2. 获取用户标识符
    3. 删除或标记为使用的当前密钥
    4. 提供输入/生成新密码的逻辑。
  4. 输入/生成密码的逻辑可能不同:

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

答案 2 :(得分:0)

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

Flask-security是执行这些操作的最佳和简便方法。它几乎可以处理所有事情。但没有积极维护。

注意 该项目不再维护。考虑一下 Flask-Security-Too项目作为替代。 -来自flask-security Github回购

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

您可以使用pip进行安装

 pip install flask-security-too flask-sqlalchemy

并导入库,例如

from flask-security import current_user, login_required

examples directoryFlask-Security repo中有一些完整(但简单)的示例。

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