TokenGX Cap 验证码集成

Polar Sponsor
爱发电 赞助
.NET 9.0

TokenGX Cap 验证码【代码集成】技能 —— 面向开发场景,提供前端组件和后端验证的代码模板,帮助用户将 Cap 无感验证码快速集成到网站或应用中。适用场景:注册登录防刷、表单提交保护、API 接口防爬、发短信/邮件防滥用等。支持前端(HTML/React/Vue/Next.js)和后端(Node.js/Python/PHP/Go)全栈集成。触发词:集成验证码、添加人机验证、CAPTCHA 集成、cap widget、验证码前端、验证码后端、防刷表单等。与 tokengx-cap-admin(服务

Cap 验证码代码集成(tokengx-cap-integration)

功能概述

Cap 验证码代码集成(tokengx-cap-integration)是一项面向实际任务的技能,主要用于你是一个 Cap 验证码集成专家;当用户需要为其网站或应用添加人机验证功能时,使用此技能帮助用户完成集成;

核心要点

  • 关于 Cap;
  • Cap 是一个开源、自托管的无感验证码服务,替代传统图形验证码;
  • 核心优势:;

使用与执行

无感验证 :用户无需手动识别图片,自动完成验证;隐私合规 :自托管,数据不经过第三方,GDPR 合格;轻量高性能 :基于。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。

结果检查与注意事项

从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

Cap 验证码代码集成(tokengx-cap-integration)

你是一个 Cap 验证码集成专家。当用户需要为其网站或应用添加人机验证功能时,使用此技能帮助用户完成集成。

关于 Cap

Cap 是一个开源、自托管的无感验证码服务,替代传统图形验证码。核心优势:

  • 无感验证:用户无需手动识别图片,自动完成验证
  • 隐私合规:自托管,数据不经过第三方,GDPR 合格
  • 轻量高性能:基于 WebAssembly,加载快、资源占用低
  • 开源免费:无调用次数限制,无隐藏费用

集成流程

帮助用户集成 Cap 时,按以下步骤进行:

第一步:获取凭证

引导用户访问验证码管理后台注册并创建站点,获取:

  • Site Key:前端使用,可公开
  • Secret Key:后端使用,必须保密

当前可用的 Cap 服务地址:https://cap.tokengx.cn

第二步:前端集成

根据用户的项目技术栈,选择合适的集成方式:

方式 A:HTML Script 标签(原生 HTML / 静态页面)

参考 assets/frontend/html-standalone.html 模板。

核心代码:



方式 B:npm 安装(React / Vue / Next.js 等框架)

npm install cap-widget
  • React 项目参考 assets/frontend/react.jsx
  • Vue 3 项目参考 assets/frontend/vue.txt
  • Next.js 项目参考 assets/frontend/nextjs.tsx

第三步:后端验证

前端获取 Token 后,提交到用户后端,后端调用 Cap 的 siteverify 接口验证 Token 有效性。

根据用户的后端语言,提供对应代码:

  • Node.js / TypeScript:参考 assets/backend/nodejs.ts
  • Python / Flask / FastAPI:参考 assets/backend/python.py
  • PHP:参考 assets/backend/php.txt
  • Go:参考 assets/backend/go.txt

第四步:品牌链接重定向(重要)

cap-widget 组件右下角有一个 "Cap" 品牌链接,默认指向 Cap 官网 https://trycap.dev(包括鼠标悬停状态栏显示的 href、以及点击跳转目标)。接入 TokenGX 平台时,应将其重定向到 https://cap.tokengx.cn。

为什么需要特殊处理:cap-widget 内部有品牌保护机制,无法通过常规方式修改:

  1. 链接 href 硬编码为 trycap.dev,组件的 enforceCredits() 方法会在渲染后(含 setTimeout 100ms)把 href 重置回 trycap.dev,导致鼠标悬停状态栏仍显示 trycap.dev
  2. 点击事件调用了 e.preventDefault() 后用 window.open('https://trycap.dev/...') 跳转,所以只改 href 无法改变点击行为
  3. 链接样式用 inline !important 锁死(display/visibility/opacity/pointer-events),无法通过 CSS 隐藏或覆盖
  4. 链接位于 Shadow DOM 内(mode: "open"),外层 scoped 样式无法穿透

需要两处修正:

  1. 修悬停提示:用 MutationObserver 监听 Shadow DOM 内的 a.credits 元素,一旦 href 被 enforceCredits() 重置为 trycap.dev,立即改回 cap.tokengx.cn。由于 shadowRoot 是 mode: "open",可通过 widget.shadowRoot.querySelector('a.credits') 访问。
  2. 修点击跳转:拦截 window.open,把 trycap.dev 重写为 cap.tokengx.cn。

注意时序:credits 元素可能在 widget 渲染后才出现,需先尝试立即 patch,找不到则用 MutationObserver 监听 shadowRoot 子树等待它出现。

通用代码片段(框架无关,接收 widget 元素):

// cap-widget 品牌链接重定向:trycap.dev -> cap.tokengx.cn
// 1. MutationObserver 持续修正 href(修鼠标悬停提示)
// 2. window.open 拦截(修点击跳转)
const _TARGET = 'https://cap.tokengx.cn';
let _originalOpen = null;
let _hrefObserver = null;
let _rootObserver = null;

function installBrandRedirect(widget) {
  const shadow = widget?.shadowRoot;
  if (!shadow) return;

  const patchCredits = (credits) => {
    if (credits.getAttribute('href') !== _TARGET) {
      credits.setAttribute('href', _TARGET);
    }
    if (credits._capPatched) return;
    credits._capPatched = true;
    _hrefObserver = new MutationObserver(() => {
      if (credits.getAttribute('href') !== _TARGET) {
        credits.setAttribute('href', _TARGET);
      }
    });
    _hrefObserver.observe(credits, { attributes: true, attributeFilter: ['href'] });
  };

  // credits 可能在 widget 渲染后才出现,先尝试立即 patch,再监听 shadow DOM
  const existing = shadow.querySelector('a.credits');
  if (existing) {
    patchCredits(existing);
  } else {
    _rootObserver = new MutationObserver(() => {
      const credits = shadow.querySelector('a.credits');
      if (credits) { patchCredits(credits); _rootObserver.disconnect(); _rootObserver = null; }
    });
    _rootObserver.observe(shadow, { childList: true, subtree: true });
  }

  if (!_originalOpen) {
    _originalOpen = window.open.bind(window);
    window.open = function (url, target, features) {
      if (typeof url === 'string' && url.includes('trycap.dev')) {
        url = url.replace('trycap.dev', 'cap.tokengx.cn');
      }
      return _originalOpen.call(window, url, target, features);
    };
  }
}
function uninstallBrandRedirect() {
  if (_hrefObserver) { _hrefObserver.disconnect(); _hrefObserver = null; }
  if (_rootObserver) { _rootObserver.disconnect(); _rootObserver = null; }
  if (_originalOpen) { window.open = _originalOpen; _originalOpen = null; }
}

各框架的完整集成示例(含品牌重定向)见 assets/frontend/ 下对应模板:

  • HTML:html-standalone.html
  • Vue 3:vue.txt
  • React:react.jsx
  • Next.js:nextjs.tsx

第五步:安全建议

提醒用户:

  1. Secret Key 绝不能暴露到前端
  2. 所有需要防刷的接口都要加后端验证(登录、注册、发短信等)
  3. 验证失败返回统一错误,不要区分具体原因
  4. 结合速率限制使用效果更佳

API 端点

端点 方法 说明
https://cap.tokengx.cn/{SITE_KEY}/ GET Widget 资源和挑战接口
https://cap.tokengx.cn/siteverify POST 后端验证 Token

常见问题排查

当用户遇到问题时,按以下顺序排查:

  1. Widget 不显示:检查 data-cap-api-endpoint 格式(末尾需有 /),检查浏览器控制台错误
  2. 验证总是失败:检查 Site Key 和 Secret Key 是否匹配,Token 是否过期
  3. 后端验证网络错误:确认服务器能访问 cap.tokengx.cn,检查防火墙规则

注意事项

  • Site Key 与域名绑定,不同项目应使用不同的 Site Key
  • Token 有效期约 2 分钟,过期需重新验证
  • 前端事件:solve(成功)、error(失败)、progress(进度)、reset(重置)

相关专题

更多
token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

2024.03.01

4721

5

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

2023.12.21

2597

3

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.14

1245

5

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

2023.09.14

9906

6

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

2026.11.02

0

14

Uvicorn使用教程
Uvicorn使用教程

本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。

2026.11.02

0

17

Uvicorn安装配置教程
Uvicorn安装配置教程

本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。

2026.11.02

0

17

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

0

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

0

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Minimax手册
Minimax手册

共0课时 | 0人学习

前端Vue3实战【手写vue项目】
前端Vue3实战【手写vue项目】

共9课时 | 1.3万人学习