node.js - 如何在Nodejs中生成过期登录代码?
问题描述
我正在使用 Node.js Express 和 MongoDB 建立一个网站,允许用户注册和登录,它运行良好,没有问题。但现在我想生成多个登录代码(类似于优惠券代码),并且用户只能使用一次。如果登录代码过期,用户将无法再登录。有没有办法做到这一点?
我正在寻找关于 passportjs 的身份验证策略,但我找不到任何一个。
谢谢
解决方案
使用 mongo 进行设置,其架构如下{ createdAt: timestamp, code: string }
- 在上创建唯一索引,
code
这样您就不能两次创建相同的代码。在客户端代码中,您最终需要重试创建一些代码。(您可以改为预先生成代码并将它们放入队列中并将它们拉下来,但这听起来有点复杂) - 为过期添加 TTL 索引
createdAt
以自动删除文档。如果您想使文档“过期”但跟踪代码曾经存在,则需要手动检查时间戳。 - 使用代码时,您需要将其删除(或将其标记为已使用)。
- 您可能希望通过 ip 包含某种速率限制,以便人们无法暴力破解代码。
使用护照,您需要指定“自定义”策略。使用自定义策略,您可以执行任何您想要设置身份验证的操作。Passport-js 如何创建自定义策略有一点指导。
推荐阅读
- javascript - 如何让 Luxon 的 Intl API 在 React-Native 中工作
- javascript - 我可以在没有店面的情况下仅使用斯巴达克斯横幅组件吗?
- r - 更改 R 中等高线图的颜色图
- python - Selenium can't locate element after I change desktop
- vue.js - 我尝试创建 Nuxt.JS 项目时出现错误
- haproxy - 如何使用 Certbot/letsencrypt 配置 HAProxy
- react-native - React Navigator 不会导航到屏幕
- java - Java多线程绘制
- java - Java - 打印数字的出现而不重复
- javascript - 如何对th内的每个数字求和