Cet article est une analyse détaillée et une introduction à la méthode d'ajout d'une nouvelle vérification d'utilisateur dans yii. Les amis qui en ont besoin peuvent s'y référer
1. ajouter un nouvel utilisateur ? Vérification :
Parce que je souhaite créer le backend et le frontend du site Web dans la même application yii. Mais le frontend contient également le centre de gestion des membres. , donc deux pages de connexion différentes sont requises et les informations utilisateur doivent être stockées dans différents cookies ou sessions. Par conséquent, une vérification utilisateur doit être ajoutée à une application
2. 🎜>
Avant de personnaliser la vérification des utilisateurs, nous devons d'abord comprendre les méthodes de vérification et d'autorisation de yii.Afin de vérifier un utilisateur, nous devons définir une classe de vérification avec une logique de vérification. Pour être implémenté dans l'interface yii IUserIdentity, différentes classes peuvent implémenter différentes méthodes de vérification. La connexion au site Web nécessite généralement de vérifier le nom d'utilisateur et le mot de passe. Yii fournit la classe CUserIdentity, qui est généralement utilisée pour vérifier les noms d'utilisateur et les mots de passe. pour le réécrire méthode Authenticate() pour implémenter notre propre méthode de vérification
Le code spécifique est le suivant :
Code Php
class UserIdentity extends CUserIdentity { private $_id; public function authenticate() { $record=User::model()->findByAttributes(array('username'=>$this->username)); if($record===null) $this->errorCode=self::ERROR_USERNAME_INVALID; else if($record->password!==md5($this->password)) $this->errorCode=self::ERROR_PASSWORD_INVALID; else { $this->_id=$record->id; $this->setState('title', $record->title); $this->errorCode=self::ERROR_NONE; } return !$this->errorCode; } public function getId() { return $this->_id; } }
Le code suivant est appelé lorsque. l'utilisateur se connecte :
// 使用提供的用户名和密码登录用户 $identity=new UserIdentity($username,$password); if($identity->authenticate()) Yii::app()->user->login($identity); else echo $identity->errorMessage;
Lorsque l'utilisateur quitte, le code suivant est appelé :
Code Php
// 注销当前用户 Yii::app()->user->logout(); 其中的user是yii的一个components.需要在protected/config/main.php中定义
'user'=>array( // enable cookie-based authentication 'allowAutoLogin'=>true, 'loginUrl' => array('site/login'), ),
Nous avons maintenant implémenté la vérification et la sortie de la connexion des utilisateurs. Mais les utilisateurs peuvent désormais accéder à toutes les actions, qu'ils soient ou non connectés. L'étape suivante consiste donc à autoriser l'accès des utilisateurs. Dans Yii, l'autorisation des utilisateurs est implémentée via le filtre de contrôle d'accès, c'est-à-dire. , filtre de contrôle d'accès. Jetons un coup d'œil à un contrôleur simple avec contrôle d'accès :
Code Php
class AdminDefaultController extends CController { public function filters() { return array('accessControl'); } public function accessRules() { return array( array( 'allow', 'users' => array('@'), ), array( 'deny', 'users' => array('*') ), ); } }
Il existe une méthode filterAccessControl dans la classe CController :
Code Php
public function filterAccessControl($filterChain) { $filter=new CAccessControlFilter; $filter->setRules($this->accessRules()); $filter->filter($filterChain); }
$filter->filter($filterChain) continue d'appeler d'autres filtres.
Et toutes les règles d'autorisation spécifiques sont définies dans accessRules :
Code Php
public function accessRules() { return array( array('deny', 'actions'=>array('create', 'edit'), 'users'=>array('?'), ), array('allow', 'actions'=>array('delete'), 'roles'=>array('admin'), ), array('deny', 'actions'=>array('delete'), 'users'=>array('*'), ), ); }
Pour les règles spécifiques, veuillez vous référer au manuel yii
Ajouter un nouveau système de vérification :<🎜. >Nous héritons d'abord d'un CAdminUser de CWebUser :
Code PHP
class CAdminWebUser extends CWebUser { public $loginUrl = array('admin/admin/login'); }
S'il s'agit d'une application globale, passez la section des composants de protected/config/main.php :
Code Php
'user'=>array( // enable cookie-based authentication 'class' => 'CAdminUser', 'allowAutoLogin'=>true, 'loginUrl' => array('site/login'), ),
Code Php
$this->setComponents(array( 'adminUser' => array( 'class' => 'CAdminWebUser', 'allowAutoLogin' => false, ) ));
Code Php
//全局应用 Yii::app()->getComponent('adminUser'); //在模块中 Yii::app()->controller->module->getComponent('adminUser');
La première étape consiste à personnaliser un filtre :
Code PHP
<. 🎜>
class CAdminAccessControlFilter extends CAccessControlFilter { protected function preFilter($filterChain) { $app=Yii::app(); $request=$app->getRequest(); $user = Yii::app()->controller->module->getComponent('adminUser'); $verb=$request->getRequestType(); $ip=$request->getUserHostAddress(); foreach($this->getRules() as $rule) { if(($allow=$rule->isUserAllowed($user,$filterChain->controller,$filterChain->action,$ip,$verb))>0) // allowed break; else if($allow<0) // denied { $this->accessDenied($user); return false; } } return true; } }
Code Php
OK, ici on peut préciser l'autorisation de adminUser dans le accessRules() de ce Controller
public function filterAccessControl($filterChain) { $filter = new CAdminAccessControlFilter(); $filter->setRules($this->accessRules()); $filter->filter($filterChain); } //在这里我们使用自定义的filter类替换了原来的filter
Ce qui précède représente l'intégralité du contenu de cet article, j'espère qu'il sera utile à tout le monde. Apprendre est utile Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !
À propos de l'implémentation de la fonction de connexion dans le framework Yii de PHP
Comment modifier yii2 .0 utilisateurs La table utilisateur utilisée pour la connexion est constituée d'autres tables
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!