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数组总结篇(一)
Sep 30 PHP
PHP小程序自动提交到自助友情连接
Nov 24 PHP
PHP MYSQL乱码问题,使用SET NAMES utf8校正
Nov 30 PHP
PHP 基于文件头的文件类型验证类函数
May 01 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
Sep 28 PHP
php操作memcache缓存方法分享
Jun 03 PHP
WordPress中用于检索模版的相关PHP函数使用解析
Dec 15 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
May 19 PHP
php实现统计二进制中1的个数算法示例
Jan 23 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
May 13 PHP
使用laravel和ECharts实现折线图效果的例子
Oct 09 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
56.com视频采集接口程序(PHP)
2007/09/22 PHP
基于pear auth实现登录验证
2010/02/26 PHP
PHP is_subclass_of函数的一个BUG和解决方法
2014/06/01 PHP
PHP实现克鲁斯卡尔算法实例解析
2014/08/22 PHP
WebGame《逆转裁判》完整版 代码下载(1月24日更新)
2007/01/29 Javascript
Javascript中的常见排序算法
2007/03/27 Javascript
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
2009/06/02 Javascript
javacript使用break内层跳出外层循环分析
2015/01/12 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
Vuejs第十一篇组件之slot内容分发实例详解
2016/09/09 Javascript
微信小程序 教程之注册程序
2016/10/17 Javascript
Vue.js创建Calendar日历效果
2016/11/03 Javascript
web页面和微信小程序页面实现瀑布流效果
2018/09/26 Javascript
微信小程序如何连接Java后台
2019/08/08 Javascript
javascript实现抢购倒计时程序
2019/08/26 Javascript
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
Python multiprocessing.Manager介绍和实例(进程间共享数据)
2014/11/21 Python
编写自定义的Django模板加载器的简单示例
2015/07/21 Python
Python数据结构之哈夫曼树定义与使用方法示例
2018/04/22 Python
python3结合openpyxl库实现excel操作的实例代码
2018/09/11 Python
python pandas实现excel转为html格式的方法
2018/10/23 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
Python中numpy模块常见用法demo实例小结
2019/03/16 Python
pandas的相关系数与协方差实例
2019/12/27 Python
python 实现将Numpy数组保存为图像
2020/01/09 Python
python 从list中随机取值的方法
2020/11/16 Python
Python应用自动化部署工具Fabric原理及使用解析
2020/11/30 Python
python如何修改文件时间属性
2021/02/05 Python
香奈儿美国官网:CHANEL美国
2020/05/20 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
2013/02/17 面试题
考试作弊被抓检讨书
2014/10/02 职场文书
健康状况证明书
2014/11/26 职场文书
2015年领导班子工作总结
2015/05/23 职场文书
Linux安装Docker详细教程
2022/07/07 Servers
基于redis+lua进行限流的方法
2022/07/23 Redis