Home > Article > Backend Development > The use and verification process of yii verification code, yii verification code verification process_PHP tutorial
If you want to implement this process, several steps are needed
The first step is to operate the controller
Add the following code in the controller you want to operate:
public function actions(){ return array( // captcha action renders the CAPTCHA image displayed on the contact page 'captcha'=>array( 'class'=>'CCaptchaAction', 'backColor'=>0xFFFFFF, 'maxLength'=>'8', // 最多生成几个字符 'minLength'=>'7', // 最少生成几个字符 'height'=>'40', 'width'=>'230', ), ); } public function accessRules(){ return array( array('allow', 'actions'=>array('captcha'), 'users'=>array('*'), ), ); }
The second step is to operate the view
Add the following code where you want to display the verification code:
<div class="control-group"> <?php $this->widget('CCaptcha',array( 'showRefreshButton'=>true, 'clickableImage'=>false, 'buttonLabel'=>'刷新验证码', 'imageOptions'=>array( 'alt'=>'点击换图', 'title'=>'点击换图', 'style'=>'cursor:pointer', 'padding'=>'10') )); ?> </div>
The third step is the operation of LoginForm
<?php /** * LoginForm class. * LoginForm is the data structure for keeping * user login form data. It is used by the 'login' action of 'SiteController'. */ class LoginForm extends CFormModel { public $username; public $password; public $rememberMe; public $verifyCode; private $_identity; /** * Declares the validation rules. * The rules state that username and password are required, * and password needs to be authenticated. */ public function rules(){ return array( // username and password are required // array('username, password', 'required'), array('username','required','message'=>'登录帐号不能为空'), array('password','required','message'=>'密码不能为空'), array('verifyCode','required','message'=>'验证码不能为空'), array('verifyCode','captcha', 'on'=>'login','allowEmpty'=>!Yii::app()->admin->isGuest), // rememberMe needs to be a boolean array('rememberMe', 'boolean'), // password needs to be authenticated array('password', 'authenticate'), ); } /** * Declares attribute labels. */ public function attributeLabels() { return array( 'rememberMe'=>'下次记住我', 'verifyCode' =>'验证码' ); } /** * Authenticates the password. * This is the 'authenticate' validator as declared in rules(). */ public function authenticate($attribute,$params) { if(!$this->hasErrors()) { $this->_identity=new UserIdentity($this->username,$this->password); if(!$this->_identity->authenticate()) $this->addError('password','帐号或密码错误.'); } } public function validateVerifyCode($verifyCode){ if(strtolower($this->verifyCode) === strtolower($verifyCode)){ return true; }else{ $this->addError('verifyCode','验证码错误.'); } } /** * Logs in the user using the given username and password in the model. * @return boolean whether login is successful */ public function login(){ if($this->_identity===null){ $this->_identity=new UserIdentity($this->username,$this->password); $this->_identity->authenticate(); } if($this->_identity->errorCode===UserIdentity::ERROR_NONE){ $duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days Yii::app()->user->login($this->_identity,$duration); return true; }else{ return false; } } }
The fourth step is to implement the verification process. Let’s check my own method specifically. It has been written in the third part.
ValidateVerifyCode is just it. It can be called in the controller
My call is as follows:
public function actionLogin(){ $model=new LoginForm; if(isset($_POST['ajax']) && $_POST['ajax']==='login-form'){ echo CActiveForm::validate($model); Yii::app()->end(); } if(isset($_POST['LoginForm'])){ $model->attributes=$_POST['LoginForm']; // validate user input and redirect to the previous page if valid if($model->validate() && $model->validateVerifyCode($this->createAction('captcha')->getVerifyCode()) && $model->login()){ $this->redirect(CController::createUrl('default/index')); } } $this->render('login',array('model'=>$model)); }