在Yii中使用Captcha验证码

来源:互联网 发布:php动态网页设计代码 编辑:程序博客网 时间:2024/05/16 05:40

在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 requiredarray('username, password,verifyCode', 'required'),// rememberMe needs to be a booleanarray('rememberMe', 'boolean'),// password needs to be authenticatedarray('password', 'authenticate'),// verifyCode needs to be entered correctlyarray('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,),);}public function actionLogin(){if (Yii::app()->user->isGuest) {$model=new UserLogin;// collect user input dataif(isset($_POST['UserLogin'])){$model->attributes=$_POST['UserLogin'];//在此核对验证码if($this->createAction('captcha')->validate($model->verifyCode, false)){// validate user input and redirect to previous page if validif($model->validate()) {//admin login onlyif( 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)); ?>



---------------------------the end------------------------------------