Typecho评论加入纯代码验证,Pigeon主题可直接使用
 •折腾记录
                                
                                
                                    10092
                                    19
                                
                            
给Pigeon主题加上一个评论验证来杜绝国外的BOT机器人评论!
参考文章1 非增强版,有漏洞,F12删除NUM元素会直接评论成功!
参考文章2 增强版,判断num1和num2元素是否为空!
最后还是自己DIY缝缝补补了一下 增加了numToWord函数让验证数字中文化
期间采了很多坑 在主题目录下的functions.php文件里修改代码
如:和主题自带的一些功能起到冲突,点赞失效! 这是因为添加的地方不对
如:方法二的代码 完全没有对已登录的用户权限进行判断,使得管理员无法成功发表评论!
使用$this->user->hasLogin(); 会提示报错;
使用$GLOBALS['isLogin'] = $this->user->hasLogin(); 后台的主题设置等功能就报错;
当然基于本文实现的方法只能简单加点儿验证,防君子不防小人;但是好过什么都不加要好!
现在博客这几天没有收到国外的机器人广告了.
最后还是发现了一个好用的方法:
 /**
  *判断用户是否已登录,未登录自动跳转到登录页面
  *@return void
  */
public function checkLogin()
 {
     $user = Typecho_Widget::widget('Widget_User');
     if (!$user->hasLogin()) {
         Typecho_Widget::widget('Widget_Notice')->set(_t("未登录"), 'error');
         $this->response->redirect($this->options->adminUrl);
     }
 }修改一下代码逻辑:
$user = Typecho_Widget::widget('Widget_User');//获取用户信息
 If($user->hasLogin()){
 return $archive;//判断已登录用户直接返回,无需验证 /使用Typecho_Widget获取用户登录信息 $user = Typecho_Widget::widget('Widget_User');
 }elseIf($_POST['num1'] == null || $_POST['num2'] == null ) {
            throw new Typecho_Widget_Exception(_t('验证码异常.', '评论失败'));
        } else {
            $sum = $_POST['sum'];
            switch ($sum) {
            case $_POST['num1'] + $_POST['num2'] : break;
            case null:
                throw new Typecho_Widget_Exception(_t('请输入验证码.', '评论失败'));
                break;
            default:
                throw new Typecho_Widget_Exception(_t('验证码错误,请认真答题', '评论失败'));
            }
        }
    }
return $archive;
}最终完美无错版本代码如下直接替换文件themes/pigeon/functions.php

最后在主题目录pigeon/common/comments.php合适的地方加入
<?php spam_protection_math();?>
评论看一下
看评论效果
备份
kankan
非常感谢
看看
看看
学习学习
这个是个好东西。
好东西好东西好东西
好东西
从迷你日志评论区来,感谢分享
请问下博主 使用这个主题为什么首页列表不显示分页 后台设置哪种显示方式都不显示
可以设置的呀 外观设置 - 分页样式 - 序列号分页
其他主题可以用吗
其他主题可用吗
怎么实现汉化大写的,共享出来 一下啊,太需要的了
numToWord () 代码段里已经贴出来了~ 我也是在网上找的代码自己套了一下
学习下