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 内部有品牌保护机制,无法通过常规方式修改:
- 链接
href硬编码为trycap.dev,组件的enforceCredits()方法会在渲染后(含 setTimeout 100ms)把href重置回trycap.dev,导致鼠标悬停状态栏仍显示trycap.dev - 点击事件调用了
e.preventDefault()后用window.open('https://trycap.dev/...')跳转,所以只改href无法改变点击行为 - 链接样式用 inline
!important锁死(display/visibility/opacity/pointer-events),无法通过 CSS 隐藏或覆盖 - 链接位于 Shadow DOM 内(
mode: "open"),外层 scoped 样式无法穿透
需要两处修正:
- 修悬停提示:用
MutationObserver监听 Shadow DOM 内的a.credits元素,一旦href被enforceCredits()重置为trycap.dev,立即改回cap.tokengx.cn。由于 shadowRoot 是mode: "open",可通过widget.shadowRoot.querySelector('a.credits')访问。 - 修点击跳转:拦截
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
第五步:安全建议
提醒用户:
- Secret Key 绝不能暴露到前端
- 所有需要防刷的接口都要加后端验证(登录、注册、发短信等)
- 验证失败返回统一错误,不要区分具体原因
- 结合速率限制使用效果更佳
API 端点
| 端点 | 方法 | 说明 |
|---|---|---|
https://cap.tokengx.cn/{SITE_KEY}/ |
GET | Widget 资源和挑战接口 |
https://cap.tokengx.cn/siteverify |
POST | 后端验证 Token |
常见问题排查
当用户遇到问题时,按以下顺序排查:
- Widget 不显示:检查
data-cap-api-endpoint格式(末尾需有/),检查浏览器控制台错误 - 验证总是失败:检查 Site Key 和 Secret Key 是否匹配,Token 是否过期
- 后端验证网络错误:确认服务器能访问
cap.tokengx.cn,检查防火墙规则
注意事项
- Site Key 与域名绑定,不同项目应使用不同的 Site Key
- Token 有效期约 2 分钟,过期需重新验证
- 前端事件:
solve(成功)、error(失败)、progress(进度)、reset(重置)
热门AI工具
相关专题
token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。
4721
2024.03.01
获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。
2597
2023.12.21
登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。
1245
2023.09.14
登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。
9906
2023.09.14
本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。
0
2026.11.02
本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。
0
2026.11.02
本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。
0
2026.11.02
Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。
0
2026.10.28
Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。
0
2026.10.28
热门下载
相关下载
精品课程
共0课时 | 0人学习
共9课时 | 1.3万人学习
最新文章