电脑Run

查看: 174|回复: 0

如何为Discuz插件添加验证码功能?

[复制链接]

29

主题

30

帖子

131

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
131
发表于 2020-8-30 02:13:51 | 显示全部楼层 |阅读模式
在做或者修改一些特殊类型的插件(比如签到)的时候,可能会被一些开签到机的所困扰,最好的办法就是增加验证码了。本文章介绍如何为Discuz插件添加dz自带的验证码。

1.准备
首先,我们要先了解到dz的表单验证机制。每个表单都会生成一个独一无二的formhash来对页面来源性进行验证。怎么验证呢?dz提供了一个submitcheck的方法,用来对提交的表单进行检查来源是否合法。


submitcheck拥有四个参数,$var : 全局变量中的下标,string类型;$allowget : 是否允许以get的方式请求,0为不允许,1为允许;$seccodecheck : 是否验证验证码,0为不验证,1为验证;$secqaacheck : 是否验证安全问答,0为不验证,1为验证。
很明显,为了验证验证码,我们需要把第三个参数$seccodecheck设置为1,就可以使用验证码验证了。
其次,我们需要为插件需要提交表单的页面,添加一个输入验证码的输入框,我们可以参考一下dz自带的登录页面的验证码的实现。

首先,dz会判断你是否启用了验证码功能,如果启用了,就会开始输出第二行,直到if的闭合最关键的就是第三句,他将会调用你当前模板的common/seccheck页面,也就是验证码页面。

1.开始改造
首先我们要找到范例插件的签到提交表单验证的位置。该插件的提交验证的地方在sign.inc.php中
QQ%E6%88%AA%E5%9B%BE20181214104935.png
那么我们首先要做的就是先写一个$seccodecheck变量(为了到时候给添加极验验证方便取消默认的验证码),赋值为1
然后修改之前的那个submitcheck,为他的第三个参数添加我们刚才写的$seccodecheck变量(第二个你就写为0就行了)。
后台代码:
if(!check_seccode($_G['gp_seccodeverify'], $_G['gp_sechash'])){ showmessage('submit_seccode_invalid'); }
接下来我们需要修改前台的表单页面,为他增加一个验证码输入框。
该插件的签到提交页面在插件目录下的template/sign.htm(电脑版)与template/touch/sign.htm(手机版)中,我们都需要进行修改。
首先我们需要先找到提交按钮(type=”submit”的button控件),然后在他的上方添加验证码代码。
前台代码:

*:






回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|电脑Run ( 豫ICP备19038182号-2 )

Copyright © 2019-2029, Diannao Run.

快速回复 返回顶部 返回列表