基于Flask令牌的密码恢复/重置如何?

时间:2014-12-30 10:03:54

标签: flask token recovery

我需要在网站上启用重置/恢复密码 在烧瓶上我想实现在用户重置pwd时生成令牌的方法。 然后将url发送到用户电子邮件(示例http://example.com/?token=huih23ui4h235h324h5oi) 确认重置密码。 用户在此URL上确认重置pwd后,我生成新的pwd,更新DB并将此pwd发送给用户。

我该怎么做?可能存在一些模块或库?

2 个答案:

答案 0 :(得分:2)

使用ItsDangerous库。

user_id = 1
password = 'shh!'

from itsdangerous import URLSafeSerializer
s = URLSafeSerializer('super-secret-key')
print s.dumps([user_id, password])
## WzEsInNoaCEiXQ.kt-4CV03gNXcN86xuRIgunbW0Sw

因此,您要向他们发送带有该令牌的链接。然后当他们点击它时,你解码它:

print s.loads('WzEsInNoaCEiXQ.kt-4CV03gNXcN86xuRIgunbW0Sw')
## [1, u'shh!']

并将其与数据库进行比较,看看他们是否已经更改了密码,如果没有 - 让他们更改密码。您还可以添加时间戳,以便设置密码更改的时间限制。

答案 1 :(得分:2)

Heyo!

@doobeh是对的 - itsdangerous是最好的图书馆直接处理这些东西。

但是,如果您正在寻找更简单的解决方案,则可能需要查看flask-stormpath。它为你处理令牌生成的东西,以及它周围的许多其他东西(到期令牌等)。

对于密码重置,此处的内容如下:

  1. 用户在网页上启动密码重置。
  2. Stormpath通过链接+令牌向用户(您的"来自"地址,自定义HTML等)发送重置电子邮件。重置令牌是唯一的,一次性使用,如果在24小时内未使用则过期
  3. 用户点击链接并登陆重置页面
  4. 您从URL中提取令牌并检查Stormpath是否进行令牌验证
  5. 用户提交新密码
  6. Stormpath发出重置成功消息(您的"来自"地址,自定义HTML等)
  7. 我是flask-stormpath的作者并且在stomrpath工作,所以我有点偏颇,但这个用例非常好。