Flask-登录密码重置

Posted

技术标签:

【中文标题】Flask-登录密码重置【英文标题】:Flask-Login Password Reset 【发布时间】:2014-05-27 05:04:11 【问题描述】:

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

【问题讨论】:

【参考方案1】:

基本逻辑:

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

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

    登录用户并显示表单以输入新密码 - 一次登录密钥 显示表单以输入密码而不是登录(如果有效) 生成新密码并发送到用户邮箱 为表单生成新的密钥以输入新密码并将其发送到用户邮箱 生成新的密钥以批准表单,通过短信发送,显示表单以输入新密码和批准密钥,然后如果有效则登录

【讨论】:

很好的答案。使用 Flask-Security 让生活变得更轻松,因为我不必从头开始编写任何东西,但这种方法绝对有用。 这是一个很好的答案,通常缺乏文档来学习从头开始做这类事情【参考方案2】:

flask-login 不负责重置密码电子邮件和其他类似的事情。它只是用来管理会话和 cookie。

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

电子邮件确认

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

密码重置/恢复

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

用户注册

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

以上是关于Flask-登录密码重置的主要内容,如果未能解决你的问题,请参考以下文章

linux12企业实战 -- 57 grafana重置登录密码

linux12企业实战 -- 57 grafana重置登录密码

在 Meteor 帐户-密码中重置密码后禁用登录

mysql 忘记root密码,重置密码,及重置密码后权限问题不能登录的解决方案

python实现登录密码重置简易操作

华硕路由器忘记了登录密码,于是重置路由器后使用默认登录名和密码admin但还是不对,重置了多次也不对