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 相关文章推荐
ThinkPHP的Widget扩展实例
Jun 19 PHP
PHP开发框架kohana3 自定义路由设置示例
Jul 14 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
Aug 11 PHP
php图片的二进制转换实现方法
Dec 15 PHP
php获取系统变量方法小结
May 29 PHP
php使用Jpgraph绘制3D饼状图的方法
Jun 10 PHP
ThinkPHP控制器详解
Jul 27 PHP
深入浅析php json 格式控制
Dec 24 PHP
Yii2设置默认控制器的两种方法
May 19 PHP
php实现自定义中奖项数和概率的抽奖函数示例
May 26 PHP
PHP PDOStatement::getAttribute讲解
Feb 01 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 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
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
2013/06/01 PHP
Thinkphp中的volist标签用法简介
2014/06/18 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
2014/11/19 PHP
两个php日期控制类实例
2014/12/09 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
不懂JavaScript应该怎样学
2008/04/16 Javascript
在JavaScript应用中实现延迟加载的方法
2015/06/25 Javascript
JavaScript实现的背景自动变色代码
2015/10/17 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
2016/10/13 Javascript
ReactNative Image组件使用详解
2017/08/07 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
2018/01/02 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
2018/10/20 Javascript
jQuery实现ajax的嵌套请求案例分析
2019/02/16 jQuery
微信小程序实现图片上传
2019/05/23 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
[01:11]回顾历届DOTA2国际邀请赛中国区预选赛
2017/06/26 DOTA
在Python中使用判断语句和循环的教程
2015/04/25 Python
django上传图片并生成缩略图方法示例
2017/12/11 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
python实现隐马尔科夫模型HMM
2018/03/25 Python
python3 拼接字符串的7种方法
2018/09/12 Python
基于python实现学生管理系统
2018/10/17 Python
python图像处理入门(一)
2019/04/04 Python
Python实现将HTML转成PDF的方法分析
2019/05/04 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
2019/06/03 Python
python使用mitmproxy抓取浏览器请求的方法
2019/07/02 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
德购商城:德国进口直邮商城
2017/06/13 全球购物
销售冠军获奖感言
2014/02/03 职场文书
2014年销售经理工作总结
2014/12/01 职场文书
长城导游词400字
2015/01/30 职场文书
会计主管岗位职责
2015/04/02 职场文书
2019个人年度目标制定攻略!
2019/07/12 职场文书
使用python生成大量数据写入es数据库并查询操作(2)
2022/09/23 Python