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 相关文章推荐
mysql,mysqli,PDO的各自不同介绍
Sep 19 PHP
鸡肋的PHP单例模式应用详解
Jun 03 PHP
分享下PHP register_globals 值为on与off的理解
Sep 26 PHP
PHP6 中可能会出现的新特性预览
Apr 04 PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 PHP
php+html5基于websocket实现聊天室的方法
Jul 17 PHP
php函数传值的引用传递注意事项分析
Jun 25 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
Jul 24 PHP
基于php解决json_encode中文UNICODE转码问题
Nov 10 PHP
PHP遍历数组的6种方式总结
Nov 17 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高级对象构建 多个构造函数的使用
2012/02/05 PHP
PHP json_decode函数详细解析
2014/02/17 PHP
浅谈PHP接收POST数据方式
2015/06/05 PHP
PHP+Mysql+jQuery中国地图区域数据统计实例讲解
2015/10/10 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
Yii框架连表查询操作示例
2019/09/06 PHP
JQuery之拖拽插件实现代码
2011/04/14 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
2013/04/26 Javascript
js打造数组转json函数
2015/01/14 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
2015/12/09 Javascript
JS使用正则实现去掉字符串左右空格的方法
2016/12/27 Javascript
微信小程序-小说阅读小程序实例(demo)
2017/01/12 Javascript
Vue + Webpack + Vue-loader学习教程之功能介绍篇
2017/03/14 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
js中getBoundingClientRect的作用及兼容方案详解
2018/02/01 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
Angular2之二级路由详解
2018/08/31 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
Javascript新手入门之字符串拼接与变量的应用
2020/12/03 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
git使用.gitignore设置不生效或不起作用问题的解决方法
2017/06/01 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
python实现多层感知器
2019/01/18 Python
对Django中的权限和分组管理实例讲解
2019/08/16 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
简单了解python字符串前面加r,u的含义
2019/12/26 Python
Pygame的程序开始示例代码
2020/05/07 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
J.Crew官网:美国知名休闲服装品牌
2017/05/19 全球购物
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
new修饰符是起什么作用
2015/06/28 面试题
工业设计专业自荐书
2014/06/05 职场文书
个人公司授权委托书范本
2014/10/12 职场文书
2015年初一班主任工作总结
2015/05/13 职场文书
教师反邪教心得体会
2016/01/15 职场文书
python 解决微分方程的操作(数值解法)
2021/05/26 Python