Yii输入正确验证码却验证失败的解决方法
前言
最近在做一个需求时,发现输入正确验证码,但是都提示验证码错误
最后追踪代码发现,如果 Model 在 save 前,单独做了 validate 验证,则在验证结束后,会重新生成验证码
然后在我们 Model save
时,也会进行 validate 验证,验证时,验证码已经重新生成了,所以会匹配不上
// 如果这里用到了验证码,就会出问题 $model = new Test(); $model->validate(); $model->save();
// 这样是正确的 $model = new Test(); // 把需要验证的 attribute 放进去,排除验证码字段 $model->validate(array('test1','test2')); $model->save()
我们可以看framework/web/widgets/captcha/CCaptchaAction.php
可以很容易就发现问题了
<?php class CaptchaAction extends CCaptchaAction { public function validate($input, $caseSensitive) { $code = $this->getVerifyCode(); $valid = $caseSensitive ? ($input === $code) : !strcasecmp($input, $code); $session = Yii::app()->session; $session->open(); $name = $this->getSessionKey() . 'count'; if (!Yii::app()->request->isAjaxRequest) { $session[$name] = $session[$name] + 1; } // 这里会重新生成 if ($session[$name] > $this->testLimit && $this->testLimit > 0) { $this->getVerifyCode(true); } return $valid; } }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
相关推荐
-
Yii使用Captcha验证码的方法
本文实例讲述了Yii使用Captcha验证码的方法.分享给大家供大家参考,具体如下: 详细代码可参考:yii自带的示例代码post项目,里面有一个contact表单用到了验证码. 1. Model: 将验证码加入UserLogin的一个属性: class UserLogin extends CFormModel { public $username; public $password; public $rememberMe; public $verifyCode; public function
-
Yii2下点击验证码的切换实例代码
最近需要用到验证码,搜索了很多关于Yii2验证码的切换的介绍,下面我来记录一下,有需要了解Yii2下验证码的切换的朋友可参考.希望此文章对各位有所帮助. 模型代码如下: <?php namespace app\admin\models; use yii; use yii\base\model; use yii\captcha\Captcha; class LoginForm extends Model{ public $verifyCode; public $password; public $
-
yii2中添加验证码的实现方法
本文实例讲述了yii2中添加验证码的实现方法.分享给大家供大家参考,具体如下: 首先,在模型中添加验证码字段: public function rules(){ return ['verifyCode', 'captcha'], } 其次,可以在函数attributeLabels中添加前台页面中验证码的字段名称: public function atrributeLabels(){ return ['verifyCode'=>'Verification Code', ]; } 然后,在视图文件中
-
Yii2 如何在modules中添加验证码的方法
最近玩了下Yii2的验证码部分,正常的逻辑都可以走通的,网上的例子也是没有问题的,关键有问题的部分是在module中使用的时候,分享给大家,往下看之前可以去看看正常情况下是如何使用的. controller部分的代码,这里的跟网上的都类似 public function actions() { return [ 'captcha' => [ 'class' => 'yii\captcha\CaptchaAction', 'fixedVerifyCode' => null, 'backCo
-
yii实现创建验证码实例解析
本文以实例形式讲述了yii创建验证码的方法,具体步骤如下所示: 一.在SiteController action()下添加如下代码: return array( // captcha action renders the CAPTCHA image displayed on the contact page 'captcha'=>array( 'class'=>'CCaptchaAction', 'backColor'=>0xFFFFFF, ), // page action rende
-
Yii框架实现的验证码、登录及退出功能示例
本文实例讲述了Yii框架实现的验证码.登录及退出功能.分享给大家供大家参考,具体如下: 捣鼓了一下午,总算走通了,下面贴出代码. Model <?php class Auth extends CActiveRecord { public static function model($className = __CLASS__) { return parent::model($className); } public function tableName() { return '{{auth}}'
-
Yii2简单实现给表单添加验证码的方法
本文实例讲述了Yii2简单实现给表单添加验证码的方法.分享给大家供大家参考,具体如下: 控制器SiteController: class SiteController extends Controller { // ... public function actions() { return [ // ... 'captcha' => [ 'class' => 'yii\captcha\CaptchaAction', 'fixedVerifyCode' => YII_ENV_TEST ?
-
Yii2增加验证码步骤详解
本来以为yii2框架验证码这块很全面,尝试百度google了一下,大多数教程写的零零散散不全面,想着自己写一份带有完整步骤的验证码教程. 我们假设site/login 表单登录需要增加验证码. 1.siteController控制器的actions方法增加captcha设置 public function actions() { return [ 'captcha' => [ 'class' => 'yii\captcha\CaptchaAction', 'maxLength' => 4
-
Yii输入正确验证码却验证失败的解决方法
前言 最近在做一个需求时,发现输入正确验证码,但是都提示验证码错误 最后追踪代码发现,如果 Model 在 save 前,单独做了 validate 验证,则在验证结束后,会重新生成验证码 然后在我们 Model save 时,也会进行 validate 验证,验证时,验证码已经重新生成了,所以会匹配不上 // 如果这里用到了验证码,就会出问题 $model = new Test(); $model->validate(); $model->save(); // 这样是正确的 $model =
-
关于django 1.10 CSRF验证失败的解决方法
最近工作闲,没事自学django,感觉这个最烦的就是各版本提供的api函数经常有变化,不是取消了就是参数没有了,网上搜到的帖子也没说明用的是什么版本的django,所以经常出现搬运过来的代码解决不了问题的情况,不过基本上遇到的坑不多,最坑的就是在提交post表单时弄了两天的CSRF验证失败问题,特此记录一下,我用的是django 1.10.3: 如果你不想使用这个功能,直接找到settings.py中的'django.middleware.csrf.CsrfViewMiddleware',这一行
-
ThinkPHP自动验证失败的解决方法
复制代码 代码如下: /* * 登陆 */ public function Login(){ if($_POST['submit']){ $DB = D('Login');//自定义Model处理 //if里面就是ThinkPHP的自动验证了. if(!$DB->create()){ $this->redirect('Index/Login', '', 3, '错误信息: '.$DB->getError().'<br/>系统将于3秒后返回重新登陆...'); }else{ $
-
js input输入百分号保存数据库失败的解决方法
解决办法如下: 1.用ASCII码替换百分号和与符号 var remark = $("#remark").val(); remark.replaceAll("ASCII69","%").replaceAll("ASCII70","&"); //展示时需要对原先替换的进行还原展示 remark.replaceAll("%","ASCII69").replaceA
-
SQL Server 2008 R2登录失败的解决方法
为大家分享SQL Server 2008 R2登录失败的解决方法 1.启动SQL Server 2008 Management Studio,会看到 2.里面有一个 身份验证.这个 身份验证 的下拉列表里面有两个选项: Windows 身份验证 和 SQL Server 身份验证. 它们有什么区别: Windows 身份验证是指:你可以使用你电脑Windows系统的用户名和密码进行登入.如果你的电脑没有设置密码,那么就不需要输入用户名和密码,直接点击连接就可以登入. 我们一般使用第二种身份验证:
-
关于C#连接SQL Server时提示用户登录失败的解决方法
在用C#开发windows端程序并连接SQL Server时有可能会遇到数据库登录失败的问题,报错现象如下图所示: 报错信息如下: System.Data.SqlClient.SqlException: '用户 '' 登录失败.' This exception was originally thrown at this call stack: [External Code] MyQQ.DataOperator.ExecSQL(string) in DataOperator.cs
-
php出现web系统多域名登录失败的解决方法
本文实例讲述了php出现web系统多域名登录失败的解决方法,分享给大家供大家参考.具体分析如下: 下面只是简单的逻辑结构,对于正式的系统需要做具体的处理. 这里需要注意的是:加解密一定需要做安全验证.但是这个方法也不够完美,两个站点必须有相同一级域名:另外这种完全基于cookie的方式,安全性不够高 function login() { $info = callloginserver(); //访问登录服务器 if(!empty($info)) //登录成功了 } //用户没有登录,则在本系统中
-
安装oracle11g INS-30131执行安装程序验证所需的初始设置失败的解决方法
安装oracle11g [INS-30131] 执行安装程序验证所需的初始设置失败. 解决方法 第一步: 控制面板>所有控制面板项>管理工具>服务>SERVER 启动 TCP/IP 启动 第二步: 1.点击 开始->运行 ,输入regedit ,然后回车键进入注册编辑器 2.找到并点击HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters 3.如果AutoShareServer和
-
关于Webpack dev server热加载失败的解决方法
利用Webpack dev server作为热加载服务器时,出现以下错误: XMLHttpRequest cannot load http://localhost:8080/dist/06854fc8988da94501a9.hot-update.json. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not
-
Linux程序运行时加载动态库失败的解决方法
Linux下不能加载动态库问题 当出现下边异常情况 ./test: error while loading shared libraries: libmfs_open.so: cannot open shared object file: No such file or directory 若动态库的路径在(/usr/cluster/.share/lib) 解决办法: 方法一.在/etc/ld.so.conf文件中添加路径,vi /etc/ld.so.conf 添加下边内容 include ld
随机推荐
- js浏览器本地存储store.js介绍及应用
- 重温JavaScript中的正则表达式 js学习笔记
- 深入剖析构建JSON字符串的三种方式(推荐)
- Python基于PycURL实现POST的方法
- ASP错误处理
- Android 事件分发详解及示例代码
- Android自定义Adapter的ListView的思路及代码
- Android批量插入数据到SQLite数据库的方法
- ASP.NET Cookie 操作实现
- PHP的简易冒泡法代码分享
- JS控制显示隐藏兼容问题(IE6、IE7、IE8)
- js实现简单登录功能的实例代码
- Javascript中各种trim的实现详细解析
- Javascript 阻止javascript事件冒泡,获取控件ID值
- 三、注册表的的修改
- Python通过Django实现用户注册和邮箱验证功能代码
- Python制作豆瓣图片的爬虫
- 详解Centos7.2编译安装zabbix3.2(详细步骤)
- Linux配置和使用i3窗口管理器的教程
- Linux使用scp命令进行文件远程拷贝详解