首页 > 解决方案 > 如何在Nodejs中生成过期登录代码?

问题描述

我正在使用 Node.js Express 和 MongoDB 建立一个网站,允许用户注册和登录,它运行良好,没有问题。但现在我想生成多个登录代码(类似于优惠券代码),并且用户只能使用一次。如果登录代码过期,用户将无法再登录。有没有办法做到这一点?

预期的登录表单

我正在寻找关于 passportjs 的身份验证策略,但我找不到任何一个。

谢谢

标签: node.jsmongodbexpress

解决方案


使用 mongo 进行设置,其架构如下{ createdAt: timestamp, code: string }

  1. 在上创建唯一索引,code这样您就不能两次创建相同的代码。在客户端代码中,您最终需要重试创建一些代码。(您可以改为预先生成代码并将它们放入队列中并将它们拉下来,但这听起来有点复杂)
  2. 为过期添加 TTL 索引createdAt以自动删除文档。如果您想使文档“过期”但跟踪代码曾经存在,则需要手动检查时间戳。
  3. 使用代码时,您需要将其删除(或将其标记为已使用)。
  4. 您可能希望通过 ip 包含某种速率限制,以便人们无法暴力破解代码。

使用护照,您需要指定“自定义”策略。使用自定义策略,您可以执行任何您想要设置身份验证的操作。Passport-js 如何创建自定义策略有一点指导。


推荐阅读