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的5个入手程序
Nov 23 PHP
php download.php实现代码 跳转到下载文件(response.redirect)
Aug 26 PHP
供参考的 php 学习提高路线分享
Oct 23 PHP
PHP PDOStatement:bindParam插入数据错误问题分析
Nov 13 PHP
浅谈Eclipse PDT调试PHP程序
Jun 09 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
Jun 17 PHP
完善CodeIgniter在IDE中代码提示功能的方法
Jul 19 PHP
php+mysql数据库实现无限分类的方法
Dec 12 PHP
php使用cookie显示用户上次访问网站日期的方法
Jan 26 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
Oct 08 PHP
Laravel日志用法详解
Oct 09 PHP
php有效防止图片盗用、盗链的两种方法
Nov 01 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
用Flash图形化数据(一)
2006/10/09 PHP
php防止伪造数据从地址栏URL提交的方法
2014/08/24 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
PHP命令空间namespace及use的用法小结
2017/11/27 PHP
nicejforms——美化表单不用愁
2007/02/20 Javascript
基于JQuery的日期联动实现代码
2011/02/24 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
微信小程序 网络API发起请求详解
2016/11/09 Javascript
JS变量及其作用域
2017/03/29 Javascript
浅谈Angular4中常用管道
2017/09/27 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
2017/11/09 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
2018/08/29 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
2019/06/19 Javascript
[01:08]DOTA2次级职业联赛 - Wings 战队宣传片
2014/12/01 DOTA
Python编程中用close()方法关闭文件的教程
2015/05/24 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
2017/07/17 Python
详解Python list 与 NumPy.ndarry 切片之间的对比
2017/07/24 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
python-web根据元素属性进行定位的方法
2019/12/13 Python
Python 定义只读属性的实现方式
2020/03/05 Python
python如何设置静态变量
2020/09/07 Python
详解anaconda安装步骤
2020/11/23 Python
Java如何格式化日期
2012/08/07 面试题
综合实践教学反思
2014/01/31 职场文书
渔夫的故事教学反思
2014/02/14 职场文书
关于感恩的演讲稿800字
2014/08/26 职场文书
校园学雷锋广播稿
2014/10/08 职场文书
教师批评与自我批评(群众路线)
2014/10/15 职场文书
高三毕业评语
2014/12/31 职场文书
我爱我班主题班会
2015/08/13 职场文书
《黄道婆》教学反思
2016/02/22 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS
Redis 配置文件重要属性的具体使用
2021/05/20 Redis
一篇文章看懂MySQL主从复制与读写分离
2021/11/07 MySQL
Python 视频画质增强
2022/04/28 Python