gpt4 book ai didi

node.js - 如何实现对帐户激活链接的过期?

转载 作者:行者123 更新时间:2023-11-29 13:39:57 25 4
gpt4 key购买 nike

我正在尝试对我在注册新帐户时发送到用户电子邮件的激活链接实现过期。

如果用户不点击链接,该链接将在 24 小时后失效。
到目前为止,我可以在注册时将链接发送到用户的电子邮件,链接看起来像这样 'http://localhost:3000/auth/activate/${verificationKey}',一切工作顺利。

但正如我所说,我希望链接在 24 小时后过期,但我不知道该怎么做。

根据我目前收集到的信息,我认为一种方法是在 24 小时后从我的用户实体/模型中删除 verificationKey 值,然后如果 verificationKey 值为 falsy 我需要向用户发送另一个链接。
现在我的问题是,如何检查一个值(在本例中为 user.verification_key)是否已生成超过 24 小时?

这是注册新用户的相关代码:

const user = new User();
user.username = username;
user.password = await bcrypt.hash(password, salt);
user.is_verified = false;
user.verification_key = cryptoRandomString({
length: 10,
type: 'url-safe',
});

有些人建议为此使用 Redis,除了它是一个内存存储外,我对它一无所知,虽然我可以阅读有关此工具的更多信息,但我想知道是否有其他方法可以做到这一点。我不知道通过安装 Redis 是否需要在托管我的应用程序时对服务器进行额外配置,我想避免这种情况。

最佳答案

因为您已经设置了一些数据库,所以存储一些验证 key 和它的过期时间是有意义的。您不需要实际删除该验证 key ...只需要在它过期时存储即可。

也许您有一个单独的 RegVerificationKey 模型,其中包含字段 key(随机生成的字符串)、expiration(设置为创建后 24 小时的日期/时间)和 userId(与之相关联的用户的 ID)。创建此 key 。当您去激活时,只需检查是否有与尚未过期的请求用户关联的 key 。

Some people have suggested to use Redis for this

这里不需要,你已经有一个可以放入数据的数据库。

I would like to know if there are other ways to do this

还有一个替代方案,您可以在其中对您的 URL 进行加密签名。基本上,您会将 key 及其过期数据存储在 URL 本身中,并包括一些您(拥有私钥的人)创建此 URL 的计算证明。当您的系统收到此 URL 时,它可以验证 URL 是否已正确签名,甚至无需查询数据库。此方法可能很复杂,并且可能对您的情况没有用。我只是在这里提到它作为替代方案。查看 JWT 以获得一种可能的实现:https://jwt.io/

关于node.js - 如何实现对帐户激活链接的过期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57032000/

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