gpt4 book ai didi

node.js - 如何使用 Passport.js 在 Node.js 中重置/更改密码?

转载 作者:IT老高 更新时间:2023-10-28 23:22:40 25 4
gpt4 key购买 nike

我在 Node.js 中使用 Passport.js 来创建登录系统。一切都很好,但是当他们忘记密码或想要更改密码时,我不知道如何重置用户密码。

MongoDB 中的用户模型

var UserSchema = new Schema({
email: String,
username: String,
provider: String,
hashed_password: String,
salt: String,
});

最佳答案

不太喜欢访问我的数据库来存储 token 的想法,尤其是当您想要为许多操作创建和验证 token 时。

相反,我决定复制 Django does it :

  • 将 timestamp_today 转换为 base36 作为 today
  • 将 user.id 转换为 base36 作为 ident
  • 创建 hash 包含:
    • timestamp_today
    • user.id
    • user.last_login
    • 用户密码
    • user.email
  • 用隐藏的 secret 为哈希加盐
  • 创建一个类似的路由:/change-password/:ident/:today-:hash

我们测试 req.params.timestamp 是为了简单地测试它在今天是否有效,首先是最便宜的测试。先失败。

然后我们找到用户,如果不存在则失败。

然后我们从上面再次生成哈希,但时间戳来自 req.params

如果出现以下情况,重置链接将失效:

  • 他们记住了自己的密码和登录信息(last_login 更改)
  • 他们实际上仍处于登录状态,并且:
    • 只需更改他们的密码(密码更改)
    • 只需更改他们的电子邮件(电子邮件更改)
  • 明天到(时间戳变化太大)

这边:

  • 您没有将这些短暂的东西存储在数据库中
  • 如果 token 的目的是改变事物的状态,而事物的状态发生了变化,那么 token 的目的就不再是安全相关的。

关于node.js - 如何使用 Passport.js 在 Node.js 中重置/更改密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20277020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com