【发布时间】:2021-01-17 15:17:11
【问题描述】:
我想允许用户重置他们的密码。为此,我首先检查他们的电子邮件是否存在于数据库中,如果存在,我会向他们发送一封电子邮件,其中包含指向重置密码页面的链接。为了确保链接安全,后者使用了一个有效期仅为 1500 万的 jwt 令牌。
但是,由于有“。”,所以无法访问该网址。在 jwt 中:
http://www.myapp.com/reset-password/eyJhbGciOInR5cC.ICJlywY2svp6eL98LHd.RpYylmPI
如果我删除点,则可以理解 url(顺便说一下,我使用 React 路由器)。如何解决这个问题?是否有另一种方法可以使用临时 url 实现此重置公式?
【问题讨论】:
-
.不是无效的,也不需要使用 encodeURIComponent 等进行编码,您需要修复如何处理传入的路由参数,因为这就是问题所在。顺便说一句,当您可以制作一个小哈希并使用日期存储在数据库中时,jwt 似乎过多 -
刚刚尝试捕捉带点的字符串,express成功捕捉到了。你能提供更多信息吗?使用 express@4.17.1
app.get('/reset/:pass', (req, res) => { /* decrypt here, and continue */ res.send(req.params.pass)}) -
@DenisRohlinsky 我使用 React 和 react-router。这是一个单页应用程序,页面不是由服务器提供的。服务器仅用于处理数据库事务。我的路由定义如下:
。如果令牌包含“.”,它会崩溃。 -
@LawrenceCherone 对数据库中的哈希有什么策略?
标签: node.js express jwt change-password