1. David Wu首页
  2. WordPress
  3. WordPress安装教程

使用 Gregwar Captcha 为 WordPress 表单添加验证码实现表单验证-WordPress开发教程

验证码可以在很大程度上防止机器注册,恶意注册等表单提交类型的攻击。WordPress 没有提供验证码机制,于是有很多插件为 WordPress 提供了验证码支持,对于普通用户,直接安装一个

验证码可以在很大程度上防止机器注册,恶意注册等表单提交类型的攻击。WordPress 没有提供验证码机制,于是有很多插件为 WordPress 提供了验证码支持,对于普通用户,直接安装一个验证码插件就可以在 WordPress 站点上实现验证码功能了。而对于开发者来说,如果每个功能都用插件来实现,那安装的插件就太多了,插件太多会拖慢网站的速度。很多负责任有追求的开发者会自己实现一个类似的功能。今天为大家介绍一个不用插件实现验证码的方法。

安装 URL router 库和生成验证码的库并引入

使用 Gregwar Captcha 生成验证码的方法非常简单,只需要实例化 CaptchaBuilder 类,新建一个对象就可以了。在下面的对象中,WordPress Dispatch 是我们用来创建请求网址的类库。

require_once( dirname( __FILE__ ) . '/../vendor/autoload.php' );use Gregwar\\Captcha\\CaptchaBuilder;use TheFold\\WordPress\\Dispatch;new Dispatch( [

	'captcha/([a-z0-9]+)' => function ( $request, $type ) {

        // 生成验证码
		$builder = new CaptchaBuilder;

        // 把生成的验证码写入 WordPress 数据库中,供第三步中验证使用
		update_option( $type . '_captcha', $builder->getPhrase());
        
        // 输出验证码
        header( 'Content-type: image/jpeg' );
		$builder->build()->output();

	},] );

在表单中显示生成的验证码,点击图片刷新验证码。

在前端显示验证码的方法非常简单,只需要把验证码图片的 src 地址设置为我们上面新建的 URL 就可以了,网址中“captcha/”后面的字符串是验证码的类型,供区分不同的验证码使用。

<div class="form-group">
    <label for="re_password">验证码</label> <span class="text-msg"></span>
    <img alt="captcha" onclick="RefreshCode(this)" id="captcha_img" data-toggle="tooltip" title="<?php _e('点击刷新验证码','wizhi'); ?>" src="<?= home_url('captcha/account'); ?>" />
    <input type="text" class="form-control" name="captcha" id="captcha" value="" placeholder="输入右图中的验证码, 点击图片刷新"/>
</div>

刷新验证码用到的 JacaScript 函数非常简单,也就是当用户点击图片时,重新加载图片,在这是给验证码图片加上了一个随机的字符串,防止缓存导致图片不刷新。

<script>
function RefreshCode(obj){
    obj.src = obj.src + "?code=" + Math.random();}
</script>

对比用户提交的验证码和程序生成的验证码。

当用户提交表单的时候,我们获取用户提交过来的验证码,并和生成验证码时保存在数据库中的验证码做对比,如果对比通过,则说明验证码正确,如果对比失败,验证码错误,返回错误信息。

$account_captcha = $_POST[ 'captcha' ];
if ( ! strcasecmp( get_option( 'account_captcha' ), $account_captcha ) == 0 ) {
    //进行注册操作
} else {
    $msg = [
         'registered' => false,
         'message' => __( '<p class="c-alert c-alert-danger" data-c-alert="c-alert">验证码错误.</p>', ' wizhi' ),
     ];
}
wp_send_json( $msg );

至此,使用 Gregwar Captcha 为 WordPress 表单添加验证码的方法就介绍完毕了,可以看出,整个过程中需要的代码量非常小。如此,我们就可以把我们的精力集中在完善业务逻辑上了,花在业务逻辑上的时间多了,相信开发出来的程序 Bug 会少很多,使用起来会更加稳定。

原创文章,作者:DavidWu,如若转载,请注明出处:https://www.davidwu.net/archives/121855

服务项目 服务内容 收费标准(元)
开发定制 WordPress主题/插件开发定制 (以最终需求为准)
主题/插件汉化 汉化团队WordPress主题/插件,翻译率95% (以标的主题/插件的句子数量为准)
服务器环境配置 基于您现有服务器,搭建配置网站运行环境,结合我们多年来实战经验,可完美支持WordPress等PHP程序运行,并配置伪静态规则、优化目录权限等问题。服务器我们强烈推荐使用Linux系统。 100元/次
网站托管 若贵站目前尚无技术人员,无法完成服务器环境配置,可选择我们的网站托管服务,直接交付正常运行的WordPress站点,并且无需担心服务器的后续维护工作,一切都由我们来帮您完成。 标配套餐:1000元/年/站点 高配套餐:联系客服获取
网站加速优化 从服务器后端配置优化到WordPress数据库缓存、前端页面缓存、JS和CSS压缩合并,全方位优化网站加载速度,实现秒开。(此服务仅针对(云)服务器/VPS) 500元/次(仅站内优化200元/次)
主题配置 本站所有主题均支持,可快速实现,若有任何问题可以咨询客服解决,若您希望我们提供配置服务,可选购此服务。 英文主题安装 60元/次 汉化主题安装 30元/次
HTTPS配置 HTTPS已经不断普及,并且有着更高的安全性以及SEO上的优待。该服务收取的为服务费,SSL证书产生的费用请自行承担。 100元/次
网站搬家 迁移网站所有文件和数据库信息、网站相关配置的调整、以及迁移中的疑难问题故障排除。 标准收费:500元/次 若网站数据量大,需协商
网站运维 提供整站的运维服务,保证网站正常运行。包含:网站故障定位及排除、网站数据备份和恢复、网站攻击及木马等问题的处理等 标准收费:2000元/年 IP 5000以上需协商

发表评论

邮箱地址不会被公开。 必填项已用*标注