21xrx.com
2024-12-23 01:56:56 Monday
登录
文章检索 我的文章 写文章
Node.js 实现图形验证码
2023-07-04 18:24:10 深夜i     --     --
Node js 图形验证码 实现

随着互联网的发展,网站安全问题越来越受到重视。为了防止机器人自动注册、恶意攻击等行为,以及保护用户的个人信息,常见的验证码技术已经成为一种必不可少的手段。而图形验证码技术,正是其中最为常用和成熟的一种。

Node.js 作为一种服务器端的 JavaScript 运行环境,其强大且灵活的特性,可以帮助开发者快速地实现各种验证码功能。以下是 Node.js 实现图形验证码的一个简单示例。

首先,我们需要安装一个能够生成验证码的库,这里我们选用了 `svg-captcha`。该库可以生成一个 SVG 格式的验证码图片,并且可以设置验证码的长度、字体大小、背景颜色等参数。我们可以使用以下命令来进行安装:


npm install svg-captcha

然后,在服务器端代码中,我们可以使用 `svg-captcha` 生成验证码图片,并将其发送给客户端浏览器显示。以下是一个示例代码:

 javascript

// 引入需要用到的库

const express = require('express');

const svgCaptcha = require('svg-captcha');

// 创建一个 Express 应用

const app = express();

// 处理 GET 请求,生成并发送验证码图片

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

  // 生成验证码图片

  const captcha = svgCaptcha.create();

  // 保存验证码文本到 Session 中,以便后续验证

  req.session.captcha = captcha.text;

  // 发送验证码图片

  res.set('Content-Type', 'image/svg+xml');

  res.send(captcha.data);

});

// 启动服务器

app.listen(3000, function(){

  console.log('Server is running on port 3000...');

});

在这段代码中,我们通过 `express` 库创建了一个 HTTP 服务器,然后定义了一个路由 `/captcha`,它会在接收到 GET 请求时生成一张验证码图片,并将验证码的文本保存到请求的 Session 中,最后将验证码图片发送给客户端浏览器。在生成验证码图片时,我们使用 `svg-captcha` 库的 `create` 方法,它会返回一个对象,其中包含了验证码的文本和 SVG 数据。为了将验证码文本保存到 Session 中,我们可以使用 Express 框架提供的 `req.session` 对象。

客户端浏览器可以通过向服务器发送 `/captcha` GET 请求,从而获取验证码图片。我们可以使用以下 HTML 代码来向服务器发送请求,并在页面上显示验证码图片:

 html

<!DOCTYPE html>

<html>

<head>

  <meta charset="UTF-8">

  <title>图形验证码</title>

</head>

<body>

  <h1>图形验证码</h1>

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

</body>

</html>

在这段 HTML 代码中,我们通过 `` 标签将验证码图片插入到页面中。当用户输入验证码文本后,我们可以将其与 Session 中保存的验证码文本进行比较,以判断用户是否正确输入了验证码。以下是一个简单的示例代码:

 javascript

// 处理 POST 请求,验证验证码

app.post('/submit', function(req, res){

  const inputCaptcha = req.body.captcha;

  const savedCaptcha = req.session.captcha;

  if(inputCaptcha === savedCaptcha){

    res.send('验证码正确。');

  }

  else{

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

  }

});

在这段代码中,我们处理了 `/submit` 路由的 POST 请求,从请求的 Body 中获取用户输入的验证码文本,并将其与 Session 中保存的验证码文本进行比较。如果两者相等,则说明用户输入了正确的验证码。否则,说明用户输入了错误的验证码。

  
  

评论区

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