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 相关文章推荐
PHP4实际应用经验篇(4)
Oct 09 PHP
ie6 动态缩略图不显示的原因
Jun 21 PHP
用PHP ob_start()控制浏览器cache、生成html实现代码
Feb 16 PHP
php 读取文件乱码问题
Feb 20 PHP
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
Dec 29 PHP
php xml 入门学习资料
Jan 01 PHP
简单的cookie计数器实现源码
Jun 07 PHP
php上传图片并压缩的实现方法
Dec 22 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
Dec 28 PHP
PHP MSSQL 分页实例
Apr 13 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
Oct 14 PHP
浅谈PHP进程管理
Mar 08 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中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
2015/04/14 PHP
web页面数据展示新想法(json)
2010/06/08 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
jquery cookie实现的简单换肤功能适合小网站
2013/08/25 Javascript
node.js中的fs.readlinkSync方法使用说明
2014/12/17 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
jQuery中unbind()方法用法实例
2015/01/19 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
javascript实现input file上传图片预览效果
2015/12/31 Javascript
jQuery.deferred对象使用详解
2016/03/18 Javascript
js无法获取到html标签的属性的解决方法
2016/07/26 Javascript
js中的事件委托或是事件代理使用详解
2017/06/23 Javascript
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
解决elementui表格操作列自适应列宽
2020/12/28 Javascript
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
Python使用chardet判断字符编码
2015/05/09 Python
老生常谈Python进阶之装饰器
2017/05/11 Python
详谈Pandas中iloc和loc以及ix的区别
2018/06/08 Python
浅谈django orm 优化
2018/08/18 Python
python自定义时钟类、定时任务类
2021/02/22 Python
python中的反斜杠问题深入讲解
2019/08/12 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
Python关于反射的实例代码分享
2020/02/20 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
MSC邮轮官方网站:加勒比海、地中海和世界各地的假期
2018/08/27 全球购物
大学运动会通讯稿
2014/01/28 职场文书
上班玩手机检讨书
2014/02/17 职场文书
青年志愿者先进事迹
2014/05/06 职场文书
创先争优活动承诺书
2014/08/30 职场文书
党员个人对照检查材料思想汇报
2014/09/16 职场文书
党员对照检查材料思想汇报(党的群众路线)
2014/09/24 职场文书
2014年工会工作总结
2014/11/12 职场文书
励志语录:只有自己足够强大,才能不被别人践踏
2020/01/09 职场文书
Golang Gob编码(gob包的使用详解)
2021/05/07 Golang
Python实现拼音转换
2021/06/07 Python