In diesem Artikel werden hauptsächlich die vom Yii-Framework implementierten Verifizierungscode- und Anmelde- und Abmeldefunktionen vorgestellt und anhand konkreter Beispiele die relevanten Schritte und Betriebstechniken der Benutzerüberprüfungs-Anmelde- und Abmeldevorgänge auf der Grundlage des Yii-Frameworks analysiert siehe Folgendes
Die Beispiele in diesem Artikel beschreiben den Bestätigungscode sowie die Anmelde- und Abmeldefunktionen, die vom Yii-Framework implementiert werden. Ich teile es Ihnen als Referenz mit:
Nachdem ich einen Nachmittag lang herumgebastelt habe, habe ich es endlich zum Laufen gebracht. Der Code ist unten aufgeführt.
Modell
<?php class Auth extends CActiveRecord { public static function model($className = __CLASS__) { return parent::model($className); } public function tableName() { return '{{auth}}'; } }
Hinweis: Meine Benutzertabelle ist auth, daher ist das Modell 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' => '验证码' ); } }
Hinweis: IndexForm kann auch als LoginForm geschrieben werden, ist aber bereits im System vorhanden, daher habe ich es nicht ersetzt. Achten Sie dabei auf die Felder Ihrer Benutzertabelle, die vorhanden sind normalerweise Passwort und Benutzername, und meine sind a_account und a_password
Controller
<?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'); } }
Hinweis: Die erste Methode besteht darin, den Bestätigungscode hinzuzufügen
Ansicht
<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(); ?>
Ändern Sie auch UserIdentity.php unter protected/components unter dem Projekt
<?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; } } }
Das obige ist der detaillierte Inhalt vonBeispiele für die Implementierung von Verifizierungscodes, Anmelde- und Exit-Funktionen im Yii-Framework. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!