Cet article présente principalement les fonctions de code de vérification, de connexion et de déconnexion implémentées par le framework Yii, et analyse les étapes et techniques de fonctionnement pertinentes des opérations de vérification de connexion et de déconnexion des utilisateurs basées sur le framework Yii sur la base d'exemples spécifiques. reportez-vous à ce qui suit
Les exemples de cet article décrivent le code de vérification, les fonctions de connexion et de déconnexion implémentées par le framework Yii. Je le partage avec vous pour votre référence. Les détails sont les suivants :
Après avoir bricolé pendant un après-midi, je l'ai finalement fait fonctionner. Le code est publié ci-dessous.
Modèle
<?php class Auth extends CActiveRecord { public static function model($className = __CLASS__) { return parent::model($className); } public function tableName() { return '{{auth}}'; } }
Remarque : Ma table utilisateur est auth, donc le modèle est Auth.php
<?php class IndexForm extends CFormModel { public $a_account; public $a_password; public $rememberMe; public $verifyCode; public $_identity; public function rules() { return array( array('verifyCode', 'captcha', 'allowEmpty' => !CCaptcha::checkRequirements(), 'message'=>'请输入正确的验证码'), array('a_account', 'required', 'message' => '用户名必填'), array('a_password', 'required', 'message' => '密码必填'), array('a_password', 'authenticate'), array('rememberMe', 'boolean'), ); } public function authenticate($attribute, $params) { if (!$this->hasErrors()) { $this->_identity = new UserIdentity($this->a_account, $this->a_password); if (!$this->_identity->authenticate()) { $this->addError('a_password', '用户名或密码不存在'); } } } public function login() { if ($this->_identity === null) { $this->_identity = new UserIdentity($this->a_account, $this->a_password); $this->_identity->authenticate(); } if ($this->_identity->errorCode === UserIdentity::ERROR_NONE) { $duration = $this->rememberMe ? 60*60*24*7 : 0; Yii::app()->user->login($this->_identity, $duration); return true; } else { return false; } } public function attributeLabels() { return array( 'a_account' => '用户名', 'a_password' => '密码', 'rememberMe' => '记住登录状态', 'verifyCode' => '验证码' ); } }
Remarque : IndexForm peut également être écrit comme LoginForm, mais il existe déjà dans le système, je ne l'ai donc pas remplacé. En même temps, faites attention aux champs de votre table utilisateur, qui sont. généralement le mot de passe et le nom d'utilisateur, et les miens sont a_account et a_password
Contrôleur
<?php class IndexController extends Controller { public function actions() { return array( 'captcha' => array( 'class' => 'CCaptchaAction', 'width'=>100, 'height'=>50 ) ); } public function actionLogin() { if (Yii::app()->user->id) { echo "<p>欢迎" . Yii::app()->user->id . ",<a href='" . SITE_URL . "admin/index/logout'>退出</a></p>"; } else { $model = new IndexForm(); if (isset($_POST['IndexForm'])) { $model->attributes = $_POST['IndexForm']; if ($model->validate() && $model->login()) { echo "<p>欢迎" . Yii::app()->user->id . ",<a href='" . SITE_URL . "admin/index/logout'>退出</a></p>";exit; } } $this->render('login', array('model' => $model)); } } public function actionLogout() { Yii::app()->user->logout(); $this->redirect(SITE_URL . 'admin/index/login'); } }
Remarque : la première méthode consiste à ajouter le code de vérification
view
<meta http-equiv="content-type" content="text/html;charset=utf-8"> <?php $form = $this->beginWidget('CActiveForm', array( 'id' => 'login-form', 'enableClientValidation' => true, 'clientOptions' => array( 'validateOnSubmit' => true ) )); ?> <p class="row"> <?php echo $form->labelEx($model,'a_account'); ?> <?php echo $form->textField($model,'a_account'); ?> <?php echo $form->error($model,'a_account'); ?> </p> <p class="row"> <?php echo $form->labelEx($model,'a_password'); ?> <?php echo $form->passwordField($model,'a_password'); ?> <?php echo $form->error($model,'a_password'); ?> </p> <?php if(CCaptcha::checkRequirements()) { ?> <p class="row"> <?php echo $form->labelEx($model, 'verifyCode'); ?> <?php $this->widget('CCaptcha'); ?> <?php echo $form->textField($model, 'verifyCode'); ?> <?php echo $form->error($model, 'verifyCode'); ?> </p> <?php } ?> <p class="row rememberMe"> <?php echo $form->checkBox($model,'rememberMe'); ?> <?php echo $form->label($model,'rememberMe'); ?> <?php echo $form->error($model,'rememberMe'); ?> </p> <p class="row buttons"> <?php echo CHtml::submitButton('Submit'); ?> </p> <?php $this->endWidget(); ?>
Modifiez également UserIdentity.php sous protected/components sous le projet
<?php /** * UserIdentity represents the data needed to identity a user. * It contains the authentication method that checks if the provided * data can identity the user. */ class UserIdentity extends CUserIdentity { /** * Authenticates a user. * The example implementation makes sure if the username and password * are both 'demo'. * In practical applications, this should be changed to authenticate * against some persistent user identity storage (e.g. database). * @return boolean whether authentication succeeds. */ public function authenticate() { /* $users=array( // username => password 'demo'=>'demo', 'admin'=>'admin', ); if(!isset($users[$this->username])) $this->errorCode=self::ERROR_USERNAME_INVALID; elseif($users[$this->username]!==$this->password) $this->errorCode=self::ERROR_PASSWORD_INVALID; else $this->errorCode=self::ERROR_NONE; return !$this->errorCode; */ $user_model = Auth::model()->find('a_account=:name',array(':name'=>$this->username)); if($user_model === null){ $this -> errorCode = self::ERROR_USERNAME_INVALID; return false; } else if ($user_model->a_password !== md5($this -> password)){ $this->errorCode=self::ERROR_PASSWORD_INVALID; return false; } else { $this->errorCode=self::ERROR_NONE; return true; } } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!