yii 驗證碼的使用和驗證過程,yii驗證碼驗證過程
如果要實現這個過程的話,需要幾個步驟
第一步就是controller的操作
在要操作的控制器中添加如下代碼:
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('*'),),);}
第二步就是view的操作
在要顯示驗證碼的地方添加如下代碼:
widget('CCaptcha',array('showRefreshButton'=>true,'clickableImage'=>false,'buttonLabel'=>'重新整理驗證碼','imageOptions'=>array('alt'=>'點擊換圖','title'=>'點擊換圖','style'=>'cursor:pointer','padding'=>'10'))); ?>
第三步就是LoginForm的操作
'登入帳號不可為空'),array('password','required','message'=>'密碼不可為空'),array('verifyCode','required','message'=>'驗證碼不可為空'),array('verifyCode','captcha', 'on'=>'login','allowEmpty'=>!Yii::app()->admin->isGuest),// rememberMe needs to be a booleanarray('rememberMe', 'boolean'),// password needs to be authenticatedarray('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 daysYii::app()->user->login($this->_identity,$duration);return true;}else{return false;}}}
第四步,實現驗證的過程,那麼具體的查看我自己的寫的一個方式,在第三部已經寫好了
validateVerifyCode就是啦,可以在controller裡面調用
我的調用如下:
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 validif($model->validate() && $model->validateVerifyCode($this->createAction('captcha')->getVerifyCode()) && $model->login()){$this->redirect(CController::createUrl('default/index'));}}$this->render('login',array('model'=>$model));}
http://www.bkjia.com/PHPjc/1072009.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1072009.htmlTechArticleyii 驗證碼的使用和驗證過程,yii驗證碼驗證過程 如果要實現這個過程的話,需要幾個步驟 第一步就是controller的操作 在要操作的控制器中...