mortspace/playcaptcha

GitHub: mortspace/playcaptcha

一款基于 React 的抓娃娃机式人机验证码组件,通过趣味化的抓取玩具交互来判断用户是否为真人。

Stars: 165 | Forks: 11

# playcaptcha 一款抓娃娃机式的验证码。 它会要求你抓取一个特定的玩具。你可以通过操作杆(或方向键)控制爪子,按下红色按钮,爪子就会潜下去抓住它下方的任何东西。将抓到的玩具运到投递口并扔进去。如果玩具正确,你就通过了验证;如果玩具错误,它会被盖子弹开并退回到玩具堆里。 它背后没有物理引擎,仅仅是在一个 rAF 循环中运行的阻尼弹簧和脚本化阶段。React state 仅在阶段发生变化时才会改变,其余部分都是通过 refs 写入的 transform,因此即使在性能较弱的设备上也能保持流畅。 显而易见但仍需说明:这只用于验证某人是否在*玩*,而不是验证他们的身份。请将其放在你真正的安全验证之前,不要用它来替代它们。 在线体验:https://feralui.vercel.app/#/captcha 这是 [FeralUI](https://github.com/mortspace/feralui) 的一部分。 ## 设置 ``` npm install playcaptcha ``` 然后将 `assets/` 文件夹复制到你的应用提供静态文件服务的目录中。默认情况下,该组件会在 `/toys/` 路径下查找玩具渲染图,并在 `/playcaptcha.svg` 查找 logo,你可以通过 `assetBase` 修改这些路径。 ``` import { ClawCaptcha } from 'playcaptcha' import 'playcaptcha/clawcaptcha.css' unlock()} /> ``` 不提供 `target` 属性的话,每次挂载都会要求抓取不同的随机玩具。你也可以固定一个: ``` unlock()} /> ``` 12 个玩具 ID:duck、bear、panda、bunny、dino、penguin、fox、frog、whale、cat、puppy、unicorn。 其他 props:`title`(标题)、`assetBase`、`className`。仅此而已。 ## 主题 在任何祖先元素上设置 CSS 变量: ``` :root { --clawcap-bg: #ffffff; /* card */ --clawcap-ink: #1c1c1e; /* text */ --clawcap-muted: #8a8a8e; --clawcap-accent: #1c1c1e; /* dialog button + focus ring */ --clawcap-action: #ff5159; /* the big red button */ } ``` 键盘可以完成所有操作(方向键 + 空格/回车键),操作杆是一个真实的 slider role,并且 prefers-reduced-motion 会将装饰性内容(进场翻滚、五彩纸屑、光环脉冲)替换为瞬间的状态切换。 MIT 许可证。玩具渲染图位于 assets/toys 目录下。
标签:FeralUI, React, Syscall, Syscalls, Web开发, 人机验证, 前端组件, 数据可视化, 暗色界面, 游戏化验证码, 自动化攻击