Yii使用Captcha验证码的方法


Posted in PHP onDecember 28, 2015

本文实例讲述了Yii使用Captcha验证码的方法。分享给大家供大家参考,具体如下:

详细代码可参考:yii自带的示例代码post项目,里面有一个contact表单用到了验证码.

1. Model:

将验证码加入UserLogin的一个属性:

class UserLogin extends CFormModel
{
 public $username;
 public $password;
 public $rememberMe;
 public $verifyCode;
 public function rules()
 {
  return array(
   // username and password are required
   array('username, password,verifyCode', 'required'),
   // rememberMe needs to be a boolean
   array('rememberMe', 'boolean'),
   // password needs to be authenticated
   array('password', 'authenticate'),
   // verifyCode needs to be entered correctly
   array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements()),
  );
 }
 /**
  * Declares attribute labels.
  */
 public function attributeLabels()
 {
  return array(
   'rememberMe'=>Yii::t('user',"Remember me next time"),
   'username'=>Yii::t('user',"username or email"),
   'password'=>Yii::t('user',"password"),
   'verifyCode'=>Yii::t('user','Verification Code'),
  );
 }
}

2. Controller

在LoginController控制器加入映射动作CCaptchaAction

public function actions()
{
 return array(
  // captcha action renders the CAPTCHA image displayed on the contact page
  'captcha'=>array(
   'class'=>'CCaptchaAction',
   'backColor'=>0xf4f4f4,
   'padding'=>0,
   'height'=>30,
   'maxLength'=>4,
  ),
  );
}
ublic function actionLogin()
{
 if (Yii::app()->user->isGuest) {
  $model=new UserLogin;
  // collect user input data
  if(isset($_POST['UserLogin']))
  {
   $model->attributes=$_POST['UserLogin'];
//在此核对验证码
   if($this->createAction('captcha')->validate($model->verifyCode, false))
   {
    // validate user input and redirect to previous page if valid
    if($model->validate()) {
    //admin login only
    if( Yii::app()->getModule('user')->isAdmin()==1 )
    {
    $this->lastViset();
    if (strpos(Yii::app()->user->returnUrl,'/index.php')!==false)
     $this->redirect(Yii::app()->controller->module->returnUrl);
    else
     $this->redirect(Yii::app()->user->returnUrl);
    }else
    {//if no admin when login out
     $this->redirect(Yii::app()->controller->module->logoutUrl);
    }
   }
   }else
   {//提示错误
    $model->addError('verifyCode','验证码不对');
   }
  }
  // display the login form
  $this->render('/user/login',array('model'=>$model));
 } else
  $this->redirect(Yii::app()->controller->module->returnUrl);
}

在验证用户名密码前,检查验证码:

if($this->createAction('captcha')->validate($model->verifyCode, false))
{

3. view

在视图中显示验证码图片,输入框

<?php $this->widget('CCaptcha'); ?>
  <?php echo CHtml::activeTextField($model,'verifyCode',array('tabindex'=>1)); ?>
<img src="http://www.XXXX.net/uploads/123456.jpg" alt="">

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP使用数组实现队列
Feb 05 PHP
php打造属于自己的MVC框架
Mar 07 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
Jun 13 PHP
php利用单例模式实现日志处理类库
Feb 10 PHP
神盾加密解密教程(三)PHP 神盾解密工具
Jun 08 PHP
PHP函数extension_loaded()用法实例
Jan 19 PHP
PHP判断是否为空的几个函数对比
Apr 21 PHP
php类自动加载器实现方法
Jul 28 PHP
PHP封装的字符串加密解密函数
Dec 18 PHP
基于PHP制作验证码
Oct 12 PHP
PHP生成随机数的方法总结
Mar 01 PHP
PHP基础之输出缓冲区基本概念、原理分析
Jun 19 PHP
yii使用activeFileField控件实现上传文件与图片的方法
Dec 28 #PHP
yii实现使用CUploadedFile上传文件的方法
Dec 28 #PHP
Yii中Model(模型)的创建及使用方法
Dec 28 #PHP
yii数据库的查询方法
Dec 28 #PHP
yii分页组件用法实例分析
Dec 28 #PHP
PHP读取文件内容的五种方式
Dec 28 #PHP
yii用户注册表单验证实例
Dec 26 #PHP
You might like
深入理解PHP之require/include顺序 推荐
2011/01/02 PHP
深入理解PHP中的Streams工具
2015/07/03 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
PHP goto语句用法实例
2019/08/06 PHP
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
2010/05/06 Javascript
jquery 滚动条事件简单实例
2013/07/12 Javascript
jquery 检测元素是否存在的实例代码
2013/11/19 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
jquery实现九宫格大转盘抽奖
2015/11/13 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
2015/12/03 Javascript
原生javascript实现自动更新的时间日期
2016/02/12 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
2016/07/12 Javascript
javascript设计模式之策略模式学习笔记
2017/02/15 Javascript
webpack开发跨域问题解决办法
2017/08/03 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
2018/03/16 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
2018/04/20 Javascript
如何让微信小程序页面之间的通信不再变困难
2019/06/03 Javascript
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
2020/08/04 Javascript
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
跟老齐学Python之一个免费的实验室
2014/09/14 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
详解python中TCP协议中的粘包问题
2019/03/22 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
详解python中docx库的安装过程
2019/11/08 Python
手动安装python3.6的操作过程详解
2020/01/13 Python
pytorch SENet实现案例
2020/06/24 Python
python安装第三方库如xlrd的方法
2020/10/31 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
纯css3实现效果超级炫的checkbox复选框和radio单选框
2014/09/01 HTML / CSS
Eyeko美国:屡获殊荣的睫毛膏、眼线笔和眉妆
2018/07/05 全球购物
几道Java和数据库的面试题
2013/05/30 面试题
php优化查询foreach代码实例讲解
2021/03/24 PHP
《天安门广场》教学反思
2014/04/23 职场文书
保送生自荐信范文
2015/03/26 职场文书
车间主任岗位职责范本
2015/04/08 职场文书
收入证明范本
2015/06/12 职场文书