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 相关文章推荐
Apache2 httpd.conf 中文版
Nov 17 PHP
PHP_Cooikes不同页面无法传递的解决方法
Mar 07 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
ThinkPHP的Widget扩展实例
Jun 19 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
Jul 05 PHP
PHP实现对站点内容外部链接的过滤方法
Sep 10 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
Mar 19 PHP
PHP使用PHPexcel导入导出数据的方法
Nov 14 PHP
图文详解PHP环境搭建教程
Jul 16 PHP
php命令行写shell实例详解
Jul 19 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
Apr 10 PHP
php实现微信和支付宝支付的示例代码
Aug 11 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
我的论坛源代码(九)
2006/10/09 PHP
php实现计数器方法小结
2015/01/05 PHP
自动生成文章摘要的代码[JavaScript 版本]
2007/03/20 Javascript
动态的改变IFrame的高度实现IFrame自动伸展适应高度
2012/12/28 Javascript
动态改变div的z-index属性的简单实例
2013/08/08 Javascript
JS的数组迭代方法
2015/02/05 Javascript
使用JavaScript实现ajax的实例代码
2016/05/11 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
2016/09/19 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
2016/10/18 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
javascript九宫格图片随机打乱位置的实现方法
2017/03/15 Javascript
Require.JS中的几种define定义方式示例
2017/06/01 Javascript
Vue 表单控件绑定的实现示例
2017/08/11 Javascript
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
jQuery实现列表的增加和删除功能
2018/06/14 jQuery
vue生成token并保存到本地存储中
2018/07/17 Javascript
JS实现Cookie读、写、删除操作工具类示例
2018/08/28 Javascript
layui字体图标 loading图标静止不旋转的解决方法
2019/09/23 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
Quasar Input:type=&quot;number&quot; 去掉上下小箭头 实现加减按钮样式功能
2020/04/09 Javascript
python装饰器使用方法实例
2013/11/21 Python
Python多进程机制实例详解
2015/07/02 Python
Python批量查询域名是否被注册过
2017/06/21 Python
Python简单计算文件MD5值的方法示例
2018/04/11 Python
python+influxdb+shell编写区域网络状况表
2018/07/27 Python
python获取微信小程序手机号并绑定遇到的坑
2018/11/19 Python
HTML5录音实践总结(Preact)
2020/05/07 HTML / CSS
BOSE德国官网:尽探索之力,享音乐之极
2016/12/11 全球购物
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
大学生涯自我鉴定
2014/01/16 职场文书
周年庆典主持词
2014/04/02 职场文书
会员卡清退活动总结
2014/08/27 职场文书
校长创先争优承诺书
2014/08/30 职场文书
公司市场部岗位职责
2015/04/15 职场文书
错误码NET::ERR_CERT_DATE_INVALID证书已过期解决方法?
2022/07/07 数码科技
Win11 Build 25179预览版发布(附更新内容+ISO官方镜像下载)
2022/08/14 数码科技