本文实例讲述了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程序设计有所帮助。
本文地址:https://www.stayed.cn/item/22035
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我