Node.js 验证码验证及有效期限制:代码示例与性能优化
- 验证第三方平台发送的验证码可以通过以下步骤进行:
- 用户在第三方平台上输入手机号并点击获取验证码
- 第三方平台将手机号和验证码发送给服务器端
- 服务器端接收到请求后,生成一个随机验证码,并将该验证码存储在缓存中,并设置有效期
- 服务器端将该验证码发送给用户手机
- 用户在客户端输入验证码并提交
- 服务器端接收到用户提交的验证码后,从缓存中取出并比对,如果一致,则验证成功,否则验证失败
- 对验证码有效期进行限制可以通过以下方法实现:
- 在缓存中存储验证码的同时,记录下验证码的生成时间
- 在比对验证码时,先判断验证码是否过期,如果过期则验证失败
- 以下是一个基于 Node.js 的验证码验证示例代码:
const express = require('express');
const bodyParser = require('body-parser');
const cache = require('memory-cache');
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// 验证码有效期为5分钟
const expireTime = 5 * 60 * 1000;
// 生成随机验证码
function generateCode() {
return Math.floor(Math.random() * 900000 + 100000).toString();
}
// 发送验证码
app.post('/sendCode', (req, res) => {
const { phone } = req.body;
const code = generateCode();
cache.put(phone, { code, expireTime, createTime: new Date().getTime() });
// TODO: 调用第三方平台发送验证码
res.send({ code });
});
// 验证验证码
app.post('/verifyCode', (req, res) => {
const { phone, code } = req.body;
const cacheData = cache.get(phone);
if (!cacheData || cacheData.code !== code) {
res.send({ success: false, message: '验证码错误或已过期' });
return;
}
const { expireTime, createTime } = cacheData;
if (new Date().getTime() - createTime > expireTime) {
res.send({ success: false, message: '验证码错误或已过期' });
return;
}
res.send({ success: true });
});
app.listen(3000, () => {
console.log('Server started on port 3000');
});
- 如果数据量过大,使用 Map 可能会卡住。可以使用内存缓存库,如 memory-cache、redis 等,来存储验证码和有效期信息。这些库支持快速存储和检索大量数据,并且可以设置过期时间,非常适合验证码等临时数据的存储。
原文地址: https://www.cveoy.top/t/topic/mu10 著作权归作者所有。请勿转载和采集!