21xrx.com
2024-05-20 11:09:58 Monday
登录
文章检索 我的文章 写文章
Node.js 图片验证码
2023-07-13 11:54:34 深夜i     --     --
Node js 图片验证码 验证码生成 验证码识别 安全性

在网站用户登录或者注册过程中,我们经常会看到图片验证码这一项目。通过要求用户输入图片中的数字或字母等,以增强账户的安全性。而Node.js是一个非常流行的服务器端JavaScript运行环境,其具有高效、轻便等特点。

Node.js与图片验证码的结合,可以让我们开发出高效、易维护的验证码系统。下面我们来讲解一下如何使用Node.js实现图片验证码的生成和验证。

首先,我们需要使用一个名为`canvas-prebuilt`的Node.js模块,这个模块提供了在服务器端绘制图像的能力。我们可以使用下面的命令来安装它:


npm install canvas-prebuilt

然后,在我们的服务器端代码中,我们可以通过以下代码创建一个基本的验证码:


const Canvas = require('canvas-prebuilt');

function generateCode() {

 const canvas = new Canvas(100, 50);

 const ctx = canvas.getContext('2d');

 // 绘制背景色

 ctx.fillStyle = '#f0f0f0';

 ctx.fillRect(0, 0, 100, 50);

 // 绘制验证码内容

 const code = Math.random().toString().slice(2, 6);

 ctx.fillStyle = '#333';

 ctx.font = 'bold 28px Arial';

 ctx.fillText(code, 25, 35);

 // 返回验证码图片的base64编码

 return canvas.toDataURL();

}

在代码中,我们通过`canvas-prebuilt`模块创建了一个100*50的画布,并绘制了一个随机的四位数验证码。最后,我们通过`toDataURL()`方法将生成的Canvas图片转换为base64编码格式返回给前端。

接下来,我们需要在前端页面中使用这个验证码。可以在HTML文件中通过以下代码实现:


<img src="/captcha" alt="验证码" />

<input type="text" name="captcha" />

其中,``标签中的`src`属性用于指定验证码图片的地址,我们可以将这个地址设为我们服务器端生成验证码的API地址。同时,输入框``中的名字应该与我们在服务器端接收验证码的参数名称一致。

服务器端代码如下:


app.get('/captcha', (req, res) => {

 const captcha = generateCode();

 req.session.captcha = captcha.slice(22);

 res.setHeader('Content-Type', 'image/png');

 res.send(Buffer.from(captcha.slice(22), 'base64'));

});

app.post('/login', (req, res) => {

 const password = req.body;

 if (captcha === req.session.captcha) {

  // 验证码正确

  // TODO: 用户名和密码验证

  res.send('登录成功!');

 } else {

  // 验证码错误

  res.send('验证码错误!');

 }

});

我们通过服务器端提供的API地址来生成验证码图片,同时将验证码的值(排除`data:image/png;base64,`)保存在`session`中。在提交表单时,我们从POST请求体中获取验证码的值,在与`session`中保存的验证码进行比较,从而确定验证码的正确性。

至此,我们就完成了一张简单的图片验证码的实现。通过使用Node.js和`canvas-prebuilt`模块,我们可以快速创建一个安全、易于维护的验证码系统。

  
  
下一篇: C++ 文档资料

评论区

{{item['qq_nickname']}}
()
回复
回复