【问题标题】:JSON Web Token (JWT) is too long to pass through client URL? Node.js and Express authenticationJSON Web Token (JWT) 太长无法通过客户端 URL? Node.js 和 Express 身份验证
【发布时间】:2021-04-23 04:55:25
【问题描述】:

我正在尝试使用 JWT 来验证用户的电子邮件地址。我无法使用 OAuth,因为用户将使用他们的工作电子邮件进行注册,并且需要使用该电子邮件进行验证。

我在我的用户模型中添加了一个名为 isVerified 的字段。我在用户注册时使用 mailgun 向用户发送了一封电子邮件,其中包含一个链接到验证页面的链接,格式为 http://{client_url}/verification/{userToken},其中 userToken 是使用生成的令牌JSON Web 令牌....令牌仅使用用户的 id 创建,因此有效负载中没有很多信息。

当用户单击此链接时,他们会收到 404 Not Found 错误。当我手动缩短 url 中的 userToken 时,它会正确连接到正确的 React 组件... 我该如何解决这个问题?

更新:我刚刚从 JWT 令牌中删除了所有句点,它正在像这样加载......所以它似乎不是长度问题,而是句点......我的反应路由器路由路径是 "/verification/:userToken" ...如何让它不受期间的影响?

【问题讨论】:

  • 手动缩短url中的userToken是什么意思,可以举个例子吗?
  • @Helix112 是的,当然,我的意思是下面会返回一个 404 错误 localhost:8080/verification/… ......但是当我在第一个句点之前将 JWT 部分截断时,它会正确连接...像这样localhost:8080/verification/…
  • @Helix112 哦,哇,我刚刚从 JWT 令牌中删除了所有句点,它正在像这样加载....所以这似乎不是长度的问题,而是句点的问题。 ..我的反应路由器路由路径是“/verification/:userToken”...你知道我如何让它不受期间的影响吗?
  • 第二个令牌不是有效的 JWT。是否“。”在令牌中阻止 url 匹配您的“验证/令牌”路由?我的意思是这样的反应“验证/string1.string2”不是有效的路线。尝试调用例如“verification/test.test.test”并查看它是否呈现您的组件。对于日期的东西,我不知道发生了什么,但我认为这更多的是关于你的反应代码以及你如何编码/解码令牌,而不是 jwt 本身的问题。发布您的代码会有所帮助。
  • @Helix112 您好,感谢您的回复。问题原来是我的 webpack 不允许在 URL 中正确读取点,所以我只是使用了一个辅助函数来替换“。”使用“%dot%”,然后在从 url 读取 jwt 时执行相反的操作。谢谢!

标签: node.js express jwt jwt-auth express-jwt


【解决方案1】:

因为这不会触发你的组件被渲染

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIyLCJpYXQiOjE2MTEwMDY5OTUsImV4cCI6MTYxMTAwODE5NX0.D_-RI_YvE6lyHZFtkMizuHxPs3huIE87D6UKFEywYdg

确实如此

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

我怀疑它以某种方式起作用,因为你摆脱了这些点。

确保“。”在令牌中阻止 url 匹配您的“验证/令牌”路由?我的意思是反应是假设

“验证/eyxxxx.eyzzzz”

不是有效的路线。

尝试调用例如“verification/test.test.test”并查看它是否呈现您的组件。

【讨论】:

  • 是的,点就是问题所在。我设法通过将 URL 转换为替换“。”来摆脱它们。用 "%dot%" const convertToUrl = (jwt) => { return jwt.replace(/\./g, '%dot%') }; 然后反过来使用令牌
猜你喜欢
  • 1970-01-01
  • 2018-05-07
  • 2019-01-25
  • 2016-12-14
  • 1970-01-01
  • 2018-02-12
  • 2015-09-18
  • 2019-09-23
  • 2015-09-20
相关资源
最近更新 更多