如何确保用户留言或评论提交时显示验证码,以防止机器人滥用?

📅 👁️ 97

在运营网站时,我们常常会遇到机器人(bot)提交大量的垃圾留言或评论,这不仅会影响网站内容质量,增加管理负担,还可能对网站的声誉造成负面影响。幸运的是,AnQiCMS 提供了一种内置的验证码机制,可以有效地帮助我们防止这类滥用行为。接下来,我们就一起看看如何在 AnQiCMS 中为用户留言或评论添加验证码。

第一步:在后台开启验证码功能

首先,我们需要登录 AnQiCMS 的后台管理界面,启用验证码的核心功能。这一步是让系统知道,在处理用户提交的留言或评论时,需要进行验证码校验。

你可以通过以下路径找到这个设置:

  1. 登录你的 AnQiCMS 后台。
  2. 在左侧导航栏中,找到并点击 “功能管理”
  3. 在展开的功能列表中,选择 “网站留言管理”“内容评论管理”。如果你想同时保护留言和评论,这两个区域可能都需要检查。
  4. 进入管理页面后,你会看到一个名为 “留言评论验证码功能” 的选项。通常,这是一个开关按钮或者复选框。只需将其状态切换为 “启用”,然后记得点击 “保存” 按钮,确保设置生效。

完成这一步后,AnQiCMS 的后台就做好了验证码校验的准备。但是,仅仅在后台启用是不够的,我们还需要在网站的前端页面上,将验证码的显示和输入字段添加进去。

第二步:修改前端模板,集成验证码表单

验证码需要一个地方来显示图片,并提供一个输入框让用户填写。这需要在你的网站前端模板中进行修改。通常,留言表单位于 guestbook/index.html 模板,而评论表单可能位于 comment/list.html 或文章详情页的模板中。

在你的留言或评论表单的合适位置(比如提交按钮上方,或在留言/评论内容输入框下方),你需要添加以下 HTML 代码片段:

<div style="display: flex; clear: both; margin-top: 15px;">
  <input type="hidden" name="captcha_id" id="captcha_id">
  <input type="text" name="captcha" required placeholder="请填写验证码" class="layui-input" style="flex: 1; margin-right: 10px;">
  <img src="" id="get-captcha" style="width: 150px;height: 56px;cursor: pointer;" alt="验证码图片" />
</div>

这里包含了三个关键元素:

  • 一个隐藏的输入框(captcha_id):它用来存储当前验证码会话的唯一标识符,用户不需要填写,但系统会用它来匹配用户输入的验证码。
  • 一个文本输入框(captcha):这是用户实际输入他们看到的验证码的地方。
  • 一个图片标签(get-captcha):这个标签将用来显示动态生成的验证码图片。

第三步:编写 JavaScript 代码,动态加载验证码图片

由于验证码图片是动态生成的,每次加载页面或刷新验证码时都会不同,所以我们需要一段 JavaScript 代码来动态地获取并显示它。这段代码会在页面加载时自动获取第一个验证码,并在用户点击验证码图片时刷新。

将以下 JavaScript 代码添加到你网站模板中引入前端 JS 的地方,或者直接放在你修改的表单 HTML 片段下方(用 <script> 标签包裹起来):

<script>
  // 监听验证码图片的点击事件,用于刷新验证码
  document.getElementById('get-captcha').addEventListener("click", function (e) {
    // 发送请求到后台 API 获取新的验证码
    fetch('/api/captcha')
      .then(response => {
        // 解析响应为 JSON 格式
        return response.json()
      })
      .then(res => {
        // 更新隐藏字段 captcha_id 的值
        document.getElementById('captcha_id').setAttribute("value", res.data.captcha_id);
        // 更新验证码图片的 src 属性,显示新的验证码图片
        document.getElementById('get-captcha').setAttribute("src", res.data.captcha);
      }).catch(err =>{
        console.error("获取验证码失败:", err); // 错误处理
      });
  });
  // 页面加载后自动触发一次点击事件,以显示初始验证码
  document.getElementById('get-captcha').click();
</script>

如果你习惯使用 jQuery,也可以采用以下更简洁的写法:

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <!-- 如果你的网站还没有引入jQuery,请先引入 -->
<script>
  // jQuery 调用方式
  $('#get-captcha').on("click", function (e) {
    $.get('/api/captcha', function(res) {
      $('#captcha_id').attr("value", res.data.captcha_id);
      $('#get-captcha').attr("src", res.data.captcha);
    }, 'json');
  });
  // 页面加载后自动触发一次点击事件,以显示初始验证码
  $('#get-captcha').click();
</script>

这段 JavaScript 代码的核心逻辑是:当页面加载时,它会向 AnQiCMS 后台的 /api/captcha 接口发送请求,获取一个验证码图片URL和一个对应的 ID。然后,它会将这个图片显示在 <img> 标签中,并将 ID 存入隐藏的 captcha_id 输入框。用户点击图片时,这个过程会重复,生成新的验证码。

第四步:保存并测试

完成以上所有修改后,保存你的模板文件。现在,访问你的网站上包含留言或评论表单的页面。

你应该会看到表单下方多了一个验证码图片和一个输入框。尝试在输入框中填入图片中的字符,然后提交留言或评论。如果验证码输入正确,你的内容就会正常发布;如果输入错误,系统会提示验证码不正确。这表明验证码功能已经成功运行,可以有效阻止自动化机器人的骚扰了。

通过以上简单的几个步骤,你的 AnQiCMS 网站就能有效地利用验证码机制,大大减少垃圾信息,让网站的内容环境更加健康和有序。


常见问题 (FAQ)

1. 为什么我在 AnQiCMS 后台开启了“留言评论验证码功能”,但前台表单仍然看不到验证码?

这通常是因为你只在后台开启了功能,但没有在前台模板中添加显示验证码所需的 HTML 元素和 JavaScript 代码。后台的设置只是启用了验证码的校验逻辑,而验证码的呈现(图片显示和输入框)需要手动集成到你的网站模板中。请确保你已按照本文的第二和第三步,在留言或评论的模板文件中添加了相应的 HTML 和 JavaScript 代码。

2. AnQiCMS 提供的验证码是什么类型的?我能自定义它的样式或更换为其他类型的验证码吗?

目前 AnQiCMS 提供的验证码是一种内置的图片验证码机制。它主要通过显示随机生成的图片字符供用户识别和输入。关于样式自定义,你可以通过修改前端 CSS 来调整验证码图片容器的大小、边框等显示效果,但图片本身的字体、颜色等通常由系统后台生成,直接自定义的选项可能有限。如果需要更换为其他类型的验证码(如滑动验证、行为验证等),则可能需要进行更深入的二次开发或等待未来版本的功能更新。

3. 验证码图片无法加载或点击刷新时没有任何反应,该如何排查?

如果验证码图片不显示或无法刷新,可能是以下原因:

  • 网络问题或 API 路径错误: 检查浏览器的开发者工具(F12),查看网络请求,确认 /api/captcha 接口是否被正确调用,是否有返回数据,以及状态码是否为 200。
  • JavaScript 错误: 在开发者工具的 Console(控制台)中检查

相关文章

在模板开发阶段,如何生成随机的占位文本来模拟真实内容显示?

在网站模板开发的过程中,我们常常会遇到一个挑战:在真实内容尚未准备好之前,如何填充页面以检查布局、样式和响应性?如果模板是空的,或者只有几行简单的文字,很难直观地评估设计效果。这时,生成随机的占位文本就成了一项非常有用的技巧。 安企CMS(AnQiCMS)作为一款高效、可定制的内容管理系统,充分考虑到了模板开发者在这一阶段的需求。系统内置了简洁而强大的`lorem`标签

2025-11-08

如何在模板中对数字进行基本的算术运算,并将结果显示出来?

在网站运营中,我们经常需要动态地展示一些数字信息,比如产品总价、文章阅读量百分比、折扣后的价格等等。安企CMS 提供的模板系统功能强大,它采用了类似 Django 模板引擎的语法,让我们可以在内容展示时轻松实现这些需求,直接在模板中对数字进行基本的算术运算,并将结果显示出来。 ### 掌握模板中的基本算术运算 在安企CMS的模板中,最直接的方式就是在双花括号 `{{ }}` 中编写算术表达式

2025-11-08

如何将数组中的元素按照指定的分隔符连接成字符串进行显示?

在安企CMS中管理和展示内容时,我们经常会遇到需要将一组相关信息合并成一段连贯文字的情况。比如说,一个产品可能有多种特性,我们希望将这些特性列表用逗号或斜杠连接起来统一显示;又或者,一篇文章关联了多个关键词标签,我们想把这些标签汇总成一行文字。此时,安企CMS强大的模板过滤器就能派上用场,特别是 `join` 过滤器,它能帮助我们轻松实现这一目标。 ### 理解 `join` 过滤器

2025-11-08

如何将后台存储的时间戳数据转换为可读的日期和时间格式显示?

在安企CMS中管理网站内容时,我们经常会遇到需要展示日期和时间的情况。然而,后台数据库里存储的这些时间信息,通常以时间戳(timestamp)的形式存在,这对于机器处理来说非常高效,但对用户而言却难以直接阅读。例如,你可能会看到一串像 `1609470335` 这样的数字,它代表的是某个特定时刻,但我们希望它能显示为“2021年1月1日 12:25:35”这种更友好的格式。 幸运的是

2025-11-08

在多站点管理环境下,如何从指定站点获取并显示特定的内容?

在当今多变的网络环境中,许多企业和内容运营者不再满足于单一站点。拥有多个品牌、产品线或需要进行多语言推广的场景越来越普遍。安企CMS(AnQiCMS)正是在这样的需求下,提供了强大的多站点管理能力,让我们可以一套系统轻松驾驭多个内容平台。 但仅仅拥有多站点功能还不够,很多时候,我们需要在一个站点上展示另一个站点的特定内容,实现资源共享和内容联动。比如,主站希望展示某个子站的最新产品

2025-11-08

如何在模板中调试显示变量的结构、类型和值,以帮助排查显示问题?

在安企CMS的模板开发过程中,有时我们会遇到变量未能如期显示,或者显示内容不正确的情况。这不仅可能影响网站的正常功能,也可能让内容展示出现偏差,降低用户体验。面对这类问题,我们需要一个高效、直观的工具来帮助我们快速定位症结所在。 安企CMS提供了一个非常实用的内置过滤器——`dump`,它能帮助我们清晰地查看模板中任何变量的结构、类型和当前值。掌握这个调试利器,能大幅提升模板开发和排错的效率

2025-11-08

如何将浮点数按照指定的精度(小数点位数)进行格式化显示?

在AnQiCMS中,内容展示的灵活性是其核心优势之一。当我们处理需要精确展示小数位数的浮点数时,了解如何利用其强大的模板引擎功能就显得尤为重要。无论是展示商品价格、统计数据还是技术参数,确保数字以期望的格式呈现,能够极大地提升用户体验和网站的专业度。 安企CMS的模板语法借鉴了Django模板引擎,提供了丰富的过滤器(Filters)来处理和格式化数据。对于浮点数的格式化显示

2025-11-08

如何将文本中的URL和电子邮件地址自动转换为可点击的链接并显示?

在网站内容管理中,我们经常会遇到需要在文章或页面中展示各种链接和电子邮件地址的场景。手动将这些文本格式转换为可点击的HTML链接不仅耗时,还容易出错,尤其当内容量庞大时,工作量更是惊人。安企CMS深知用户的这一痛点,内置了高效且智能的文本处理机制,能够自动识别并转换URL和电子邮件地址,极大地提升了内容发布的效率和用户浏览体验

2025-11-08