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 相关文章推荐
一个好用的分页函数
Nov 16 PHP
解析PHP中$_FILES的使用以及注意事项
Jul 05 PHP
利用谷歌 Translate API制作自己的翻译脚本
Jun 04 PHP
php使用百度ping服务代码实例
Jun 19 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
Dec 16 PHP
php项目中百度 UEditor 简单安装调试和调用
Jul 15 PHP
PHP格式化MYSQL返回float类型的方法
Mar 30 PHP
PHP读取大文件末尾N行的高效方法推荐
Jun 03 PHP
php实现给二维数组中所有一维数组添加值的方法
Feb 04 PHP
PHP快速推送微信模板消息
Apr 14 PHP
php swoft框架实例用法
Dec 22 PHP
php微信小程序解包过程实例详解
Mar 31 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的类树(支持无限分类)
2006/10/09 PHP
解决控件遮挡问题:关于有窗口元素和无窗口元素
2007/01/28 PHP
php重定向的三种方法分享
2012/02/22 PHP
关于PHP堆栈与列队的学习
2013/06/21 PHP
php下pdo的mysql事务处理用法实例
2014/12/27 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
jquery 图片上传按比例预览插件集合
2011/05/28 Javascript
JavaScript 和 Java 的区别浅析
2013/07/31 Javascript
深入理解javascript变量声明
2014/11/20 Javascript
理解JavaScript中Promise的使用
2016/01/18 Javascript
AngularJS基础 ng-include 指令示例讲解
2016/08/01 Javascript
详解JS-- 浮点数运算处理
2016/11/28 Javascript
opencv 识别微信登录验证滑动块位置
2018/08/07 Javascript
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
python提取内容关键词的方法
2015/03/16 Python
python实现指定字符串补全空格的方法
2015/04/30 Python
Python实现高效求解素数代码实例
2015/06/30 Python
Python操作Word批量生成文章的方法
2015/07/28 Python
Python中Iterator迭代器的使用杂谈
2016/06/20 Python
Python实现命令行通讯录实例教程
2016/08/18 Python
Python 详解基本语法_函数_返回值
2017/01/22 Python
Python 中Pickle库的使用详解
2018/02/24 Python
使用python3构建文件传输的方法
2019/02/13 Python
PyQt5使用QTimer实现电子时钟
2019/07/29 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
pyqt5中动画的使用详解
2020/04/01 Python
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
英国二手物品交易网站:Preloved
2017/10/06 全球购物
速比涛英国官网:Speedo英国
2019/07/15 全球购物
罗马尼亚在线杂货店:Pilulka.ro
2019/09/28 全球购物
商业活动邀请函
2014/02/04 职场文书
中国梦党课学习心得体会
2016/01/05 职场文书
军训心得体会范文(2016最新篇)
2016/01/11 职场文书
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript