Heim  >  Artikel  >  Backend-Entwicklung  >  yii 验证码的使用跟验证过程

yii 验证码的使用跟验证过程

WBOY
WBOYOriginal
2016-06-13 12:27:36917Durchsuche

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的操作

在要显示验证码的地方添加如下代码:

<div class="control-group"><?php $this->widget('CCaptcha',array('showRefreshButton'=>true,'clickableImage'=>false,'buttonLabel'=>'刷新验证码','imageOptions'=>array('alt'=>'点击换图','title'=>'点击换图','style'=>'cursor:pointer','padding'=>'10'))); ?></div>


第三步就是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 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));}

  

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn