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 相关文章推荐
数据库相关问题
Oct 09 PHP
PHP,ASP.JAVA,JAVA代码格式化工具整理
Jun 15 PHP
PHP得到某段时间区间的时间戳 php定时任务
Apr 12 PHP
thinkPHP的Html模板标签使用方法
Nov 13 PHP
PHP中如何定义和使用常量
Feb 28 PHP
一些php项目中比较通用的php自建函数的详解
Jun 06 PHP
php实现购物车功能(下)
Jan 05 PHP
Json_encode防止汉字转义成unicode的方法
Feb 25 PHP
基于PHP实现数据分页显示功能
May 26 PHP
php版微信公众号自定义分享内容实现方法
Sep 22 PHP
CI框架简单分页类用法示例
Jun 06 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
Dec 15 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检测文件编码的方法示例
2014/04/25 PHP
php程序员应具有的7种能力小结
2014/11/27 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
2014/12/09 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
2016/04/15 PHP
PHP反射API示例分享
2016/10/08 PHP
PHP巧妙利用位运算实现网站权限管理的方法
2017/03/12 PHP
createElement动态创建HTML对象脚本代码
2008/11/24 Javascript
JavaScript中的null和undefined解析
2012/04/14 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
js函数排序的实例代码
2013/07/01 Javascript
JavaScript基础知识之方法汇总结
2016/01/24 Javascript
基于JavaScript实现熔岩灯效果导航菜单
2017/01/04 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
使用vue的v-for生成table并给table加上序号的实例代码
2017/10/27 Javascript
Vue+webpack项目基础配置教程
2018/02/12 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
2018/04/23 Javascript
详解Node.js中path模块的resolve()和join()方法的区别
2018/10/29 Javascript
详解vuex状态管理模式
2018/11/01 Javascript
35个Python编程小技巧
2014/04/01 Python
Python字符编码与函数的基本使用方法
2017/09/30 Python
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
ubuntu安装mysql pycharm sublime
2018/02/20 Python
python输出数组中指定元素的所有索引示例
2019/12/06 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
2020/03/06 Python
python输出数学符号实例
2020/05/11 Python
Python timeit模块原理及使用方法
2020/10/10 Python
纯CSS3实现圆角效果(含IE兼容解决方法)
2014/05/07 HTML / CSS
索尼巴西商店:Sony巴西
2019/06/21 全球购物
JD Sports西班牙:英国领先的运动服装公司
2020/01/06 全球购物
高中体育教学反思
2014/01/29 职场文书
群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
教师党员群众路线教育实践活动心得体会
2014/11/04 职场文书
副总经理岗位职责
2015/02/02 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
干部理论学习心得体会
2016/01/21 职场文书