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 快速生成 Flash 动画的方法
Mar 06 PHP
PHP版自动生成文章摘要
Jul 23 PHP
php获得用户ip地址的比较不错的方法
Feb 08 PHP
php中把美国时间转为北京时间的自定义函数分享
Jul 28 PHP
PHP中常用的输出函数总结
Sep 22 PHP
curl和libcurl的区别简介
Jul 01 PHP
php基于session实现数据库交互的类实例
Aug 03 PHP
学习php设计模式 php实现工厂模式(factory)
Dec 07 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
Apr 28 PHP
修改Laravel5.3中的路由文件与路径
Aug 10 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 PHP
php使用curl获取header检测开启GZip压缩的方法
Aug 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下HTTP Response中的Chunked编码实现方法
2008/11/19 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
基于jQuery架构javascript基础体系
2011/01/01 Javascript
javaScript 计算两个日期的天数相差(示例代码)
2013/12/27 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
javascript+canvas制作九宫格小程序
2014/12/28 Javascript
jquery实现实时改变网页字体大小、字体背景色和颜色的方法
2015/08/05 Javascript
javascript中数组和字符串的方法对比
2016/07/20 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
inner join 内联与left join 左联的实例代码
2017/09/18 Javascript
javaScript 连接打印机,打印小票的实例
2017/12/29 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
2018/03/05 Javascript
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
js实现简单的秒表
2020/01/16 Javascript
Python递归函数定义与用法示例
2017/06/02 Python
利用信号如何监控Django模型对象字段值的变化详解
2017/11/27 Python
TensorFlow Session会话控制&amp;Variable变量详解
2018/07/30 Python
Django如何开发简单的查询接口详解
2019/05/17 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
Jupyter Notebook折叠输出的内容实例
2020/04/22 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
阿根廷在线宠物商店:Puppis
2018/03/23 全球购物
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
信息部岗位职责
2013/11/12 职场文书
运动会通讯稿400字
2014/01/28 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
公司员工活动策划方案
2014/08/20 职场文书
党员自我剖析材料范文
2014/10/06 职场文书
看上去很美观后感
2015/06/10 职场文书
个人收入证明格式
2015/06/24 职场文书
趣味运动会新闻稿
2015/07/17 职场文书
为什么中国式养孩子很累?
2019/08/07 职场文书
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers