XCaptcha-for-Typecho 新一代的Typecho验证插件
更新
2025-03-09
关于XCaptcha导致 Typecho的控制台->个人配置 显示XCaptcha配置找不到的bug已经在XCaptcha v1.2.1版本修复
此次更新移除了./includes/XCaptcha_config.php
的personalConfig
方法,然后将./Plugin.php
的personalConfig
方法体留空(此方法不能被删除,因为Typecho的接口要求实现,但在此方法中调用内部的personalConfig会报错)
起因
之前由于博客垃圾评论过多,因此想要找一个验证码插件来给评论提交添加验证。一开始我用的是本地的数字图片验证码,后来在别人项目的基础上改进了CairBin/typecho-plugin-geetest。
但是这个仅支持极验证,如果需要用Google reCaptcha等还需要重新上传,于是便打算自己写一个支持多种验证码的插件。
Github项目地址 CairBin/XCaptcha
支持
目前支持的验证码如下:
使用方式
下载本项目
通过git命令来获取本项目:
git clone https://github.com/CairBin/XCaptcha.git
或者通过下载的方式获取压缩包,解压后的文件夹名称修改为XCaptcha
。
配置插件
将XCaptcha
文件夹上传到你的Typecho博客的usr/plugins/
目录下,在Typecho后台的插件面板里激活即可。
从上述所支持验证码的官网注册账户,然后获取你站点的Captcha ID
和Secret Key
,有的也叫Site Key
和Secret Key
,本质上都一样,对应公钥和私钥。前者用于前端标识可以公开,后者用于服务端向验证码服务器校验需要保密。
修改你主题模板的comments.php
文件,主题目录是usr/themes/your_them/
,在评论提交按钮之前或者表单最后添加一行代码:
<?php if (array_key_exists('XCaptcha', Typecho_Plugin::export()['activated'])) : XCaptcha_Plugin::showCaptcha(); endif; ?>
回到博客后台配置插件,将获取到的ID/Key填写进去,以及配置其他参数即可。
这里需要特别说明一下,“引入JS的CDN加速地址”取决于网络情况,它会替代原本引入的验证初始化脚本(不是二次验证的接口),如果遇到某些JS加载缓慢可以使用,如果不明白留空即可。
另外,如果勾选了开启登陆页面验证码则,注册页面也会跟着开启,前提是你启动了注册功能。
项目展示
特别感谢
本项目在编写时参考了其他插件项目:
32 条评论
问题复现:
开启插件后点击 控制台 - 个人设置 会提示 500 错误:插件XCaptcha的配置信息没有找到
禁用插件后就正常了,期望修复。
插件XCaptcha的配置信息没有找到
Typecho\Plugin\Exception: 插件XCaptcha的配置信息没有找到 in /www/wwwroot/kikirepository.cn/var/Widget/Options.php:392
Stack trace:
#0 /www/wwwroot/kikirepository.cn/var/Widget/Users/Profile.php(162): Widget\Options->personalPlugin()
#1 /www/wwwroot/kikirepository.cn/var/Widget/Users/Profile.php(128): Widget\Users\Profile->personalForm()
#2 /www/wwwroot/kikirepository.cn/admin/profile.php(50): Widget\Users\Profile->personalFormList()
#3 {main}
我现在也一直在尝试复现这个问题,但是在我的环境下并不报错,请问你用的typecho版本是多少,另外把XCaptch插件的版本也告诉我一下
typecho版本v1.2.1
插件版本Xcaptcha 1.2.0
Php版本8.0.26
Nginx 1.26.1
MySQL 5.7.40
XCaptcha v1.2.1版本已经修复这个问题,具体过程可以查看issue
大佬你好,想问下你的代码放到哪个位置了,感觉我放的位置好丑,验证页面和发表评论紧挨着,好难看
你可以通过css修改下间距
希望可以在未验证的时候禁用登录按钮,现在测试登陆页面不验证同样可以提交
对于Geetest可以这样做,它可以在自定义的回调函数中添加或者移除样式,但是其他验证码的校验是通过CDN引入的script,我并不清楚是否能自定义验证之后的回调,所以把这个细节砍掉了。
好用 !不过已登录也要验证就有点难受。
能具体描述下吗,我升级下插件OWO
好的,就是,网站管理员回复他人评论也需要进行验证。要是能改成站长回复评论不需要验证就完美了!
最新版本已经添加此功能了,可选择开启管理员评论不需验证
我一直想对PJAX主题做兼容,但是没有足够的主题可以做测试,在有的PJAX上能工作有的不能
你好大佬,有没有可以暂时关闭这个插件的方法,直接删掉会报错,我在登录的时候,验证成功了也提示我验证,导致我进入不了后台
另外这个是插件导致的还是配置不当导致的,我测试的时候没问题啊
不清楚,因为刚配置好没问题,过了一天才这样,也有可能是cloudflare抽风。
已经恢复,非常感谢|´・ω・)ノ
你去数据库的typecho_options里修改name为plugins那一行为`a:0:{}`,操作前记得备份数据库!
评论的时候验证码显示验证成功 但是评论没反应
请问是用的哪一个验证,极验证还是hCaptcha还是reCaptcha还是cloudflare
另外请提供下typecho版本号,可以到github仓库提issue来写明具体情况
有站点吗,我看下具体情况
请问博主用的什么主题,我想在本地复现下问题
由于是收费主题我无法进行测试,请问下jquery开启状态,jquery CDN配置(这两项仅针对于极验证)
请尝试下使用其它验证工具如cloudflare或者hcaptcha是否出现同样的问题
请问引入JS的CDN加速地址默认是https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/2.2.4/jquery.min.js吗,为什么我在设置里更改为https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js会导致验证码无法正常加载呢,我去Plugin.php里将https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/2.2.4/jquery.min.js改为https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js才正常OωO
我现在已经更新仓库的代码了,目前v1.0.1版本,改用了jsdelivr作为默认CDN,支持启动或禁用插件的jQuery(对于Handsome等主题不需要额外引入)。
另外还支持自定义jquery的URL,即使默认的挂掉了可以在插件配置页面手动更换。
好的谢谢|´・ω・)ノ,已star
因为大陆访问不了jsdelivr(之前是这样,不知道现在恢复了没),我默认使用的字节跳动的CDN加载的jquery,测试的时候是正常的。可能你服务器地区原因访问不了吧,我更新下插件来添加这个的设置项。
完了,我的主题没有comments.php文件
在其他PHP文件里找到评论提交表单那部分就行,有的主题不一定非得有comments.php