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介绍篇
Oct 26 PHP
PHP5权威编程阅读学习笔记 附电子书下载
Jul 05 PHP
php正则表达式使用的详细介绍
Apr 27 PHP
深入分析PHP引用(&amp;)
Sep 04 PHP
Yii使用ajax验证显示错误messagebox的解决方法
Dec 03 PHP
php+jQuery.uploadify实现文件上传教程
Dec 26 PHP
PHP MySql增删改查的简单实例
Jun 21 PHP
thinkPHP线上自动加载异常与修复方法实例分析
Dec 01 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
Feb 09 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 PHP
PHP7扩展开发之hello word实现方法详解
Jan 15 PHP
PHP实现简单计算器小程序
Aug 28 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
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
2013/06/20 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
2013/07/15 PHP
PHP面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
smarty内置函数capture用法分析
2015/01/22 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
PHP get_html_translation_table()函数用法讲解
2019/02/16 PHP
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
JavaScript数组迭代器实例分析
2015/06/09 Javascript
jQuery平滑旋转幻灯片特效代码分享
2015/09/07 Javascript
jQuery.trim() 函数及trim()用法详解
2015/10/26 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
Vue自定义指令写法与个人理解
2019/02/09 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
vue实现中部导航栏布局功能
2019/07/30 Javascript
JavaScript实现表单验证功能
2020/12/09 Javascript
[01:09:50]VP vs Pain 2018国际邀请赛小组赛BO2 第二场
2018/08/20 DOTA
python各种语言间时间的转化实现代码
2016/03/23 Python
Python实现压缩文件夹与解压缩zip文件的方法
2018/09/01 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
2019/07/25 Python
python获取依赖包和安装依赖包教程
2020/02/13 Python
Python基于字典实现switch case函数调用
2020/07/22 Python
详解Python 最短匹配模式
2020/07/29 Python
关于box-sizing的全面理解
2016/07/28 HTML / CSS
HTML5 canvas基本绘图之绘制矩形
2016/06/27 HTML / CSS
北美三大旅游网站之一:Travelocity
2017/08/12 全球购物
Java基础知识面试要点
2016/07/29 面试题
会计工作能力自我评价
2015/03/05 职场文书
傲慢与偏见读书笔记
2015/06/29 职场文书
2016党员入党决心书
2015/09/22 职场文书
建房合同协议书
2016/03/21 职场文书
承诺书应该怎么写?
2019/09/10 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
go开发alertmanger实现钉钉报警
2021/07/16 Golang