fastadmin问答系统:管理员提交文章问题不需要填写验证码

发布于 2024-11-01 19:41:25

背景

验证码主要是为了防止外部用户恶意自动填写内容,但是也增加了录入的步骤。特别是管理员录入文章也需要填写验证码,就特别的麻烦。
image.png

期望管理员录入时,能免填验证码。如何做到呢?

解决思路

1、在config里维护免填验证码的账号
2、页面模板里检测到当前用户在免填验证码清单里,就不显示验证码输入框
3、controll提交数据的方法里,检测到当前用户在免填验证码清单里,就不进行验证码的校验。

操作步骤

在config里维护免填验证码的账号

image.png
代码如下:

    [
        'name' => 'nocaptchusers',
        'title' => '免验证码用户',        
        'type' => 'string',
        'content' => [],
        'value' => 'feige,352258802',
        'rule' => '',
        'msg' => '',
        'tip' => '这些用户发表内容不需要验证码',
        'ok' => '',
        'extend' => '',
    ],

页面模板隐藏验证码输入框

image.png
关键代码如下:

<!-- edit tonny 20241101:如果是免验证用户,不需要验证码 -->
 <?php 
    $nocaptchuserList = explode(',', $askConfig['nocaptchusers']??'');
    $currentUserName = $askConfig['user']["username"];
    if(!in_array($currentUserName, $nocaptchuserList)):
?>                                           
    <div class="form-group">
        <label class="control-label">验证码</label>
        ....
    </div>
<?php endif;?>

controll方法屏蔽验证码的校验

image.png
关键代码如下:

//edit tonny 20241101:如果免验证码用户,则不验证验证码
//$this->captcha('postarticle');
$nocaptchuserList = explode(',', $config['nocaptchusers']??''); 
$currentUserName = $this->auth->username;
if(!in_array($currentUserName, $nocaptchuserList)){
    $this->captcha('postarticle');
}

其他的功能的调整

以上是文章模块的调整,问题和回答的也按此方法实现即可。

最终效果如下

image.png

0 条评论

发布
问题