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 相关文章推荐
自动分页的不完整解决方案
Jan 12 PHP
用PHP实现Ftp用户的在线管理的代码
Mar 06 PHP
php编写一个简单的路由类
Apr 13 PHP
PHP上传图片进行等比缩放可增加水印功能
Jan 13 PHP
2014过年倒计时示例
Jan 31 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
Jul 15 PHP
PHP生成json和xml类型接口数据格式
May 17 PHP
thinkPHP中create方法与令牌验证实例浅析
Dec 08 PHP
让你的PHP7更快之Hugepage用法分析
May 31 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
详解Laravel服务容器的绑定与解析
Nov 05 PHP
数据结构之利用PHP实现二分搜索树
Oct 25 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 处理图片的类实现代码
2009/10/23 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
php注册和登录界面的实现案例(推荐)
2016/10/24 PHP
php查询及多条件查询
2017/02/26 PHP
短信提示使用 特效
2007/01/19 Javascript
jquery indexOf使用方法
2013/08/19 Javascript
javascript字母大小写转换的4个函数详解
2014/05/09 Javascript
浅谈Javascript中深复制
2014/12/01 Javascript
javascript数组去重小结
2016/03/07 Javascript
Node.js的npm包管理器基础使用教程
2016/05/26 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
2017/09/11 Javascript
vue实现长图垂直居上 vue实现短图垂直居中
2017/10/18 Javascript
AngularJS实现的select二级联动下拉菜单功能示例
2017/10/25 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
Nodejs实现爬虫抓取数据实例解析
2018/07/05 NodeJs
vue实现后台管理权限系统及顶栏三级菜单显示功能
2019/06/19 Javascript
Smartour 让网页导览变得更简单(推荐)
2019/07/19 Javascript
vue实现路由监听和参数监听
2019/10/29 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
2020/06/05 Javascript
Python全排列操作实例分析
2018/07/24 Python
Python json模块dumps、loads操作示例
2018/09/06 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
2020/12/04 Python
VSCode 自定义html5模板的实现
2019/12/05 HTML / CSS
吉列剃须刀美国官网:Gillette美国
2018/07/13 全球购物
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
什么是聚集索引和非聚集索引
2012/01/17 面试题
数控技术应届生求职信
2013/11/13 职场文书
房地产推广策划方案
2014/05/19 职场文书
优秀校长事迹材料
2014/12/24 职场文书
个人培训总结
2015/03/05 职场文书
基于Go Int转string几种方式性能测试
2021/04/28 Golang
Netflix《海贼王》真人版剧集多张片场照曝光
2022/04/04 日漫
详解SQL报错盲注
2022/07/23 SQL Server