Maison >développement back-end >tutoriel php >Comment ajouter une nouvelle vérification d'utilisateur dans yii

Comment ajouter une nouvelle vérification d'utilisateur dans yii

不言
不言original
2018-06-15 16:20:261377parcourir

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 :

Code Php

// 使用提供的用户名和密码登录用户  
$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中定义
Code Php

'user'=>array(  
    // enable cookie-based authentication  
    'allowAutoLogin'=>true,  
        'loginUrl' => array('site/login'),  
),
Ici, nous ne spécifions pas le nom de classe de l'utilisateur car l'utilisateur est une instance de la classe CWebUser par défaut dans Yii.

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('*')  
                ),  
            );  
        }  
}
Nous définissons le filtre spécifique dans la méthode des filtres. Nous pouvons voir qu'il y a un paramètre accessControl dans. le tableau renvoyé par la méthode filters,

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);  
}
Une nouvelle instance de CAccessControlFilter est créée à l'intérieur et les paramètres renvoyés par la méthode accessRules() sont transmis lorsque setRules.

$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

Nous devons le placer dans les composants
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'),  
),
S'il est dans les modules, ajoutez le code suivant dans la méthode init de la classe module :

Code Php

$this->setComponents(array(  
       'adminUser' => array(  
                'class' => 'CAdminWebUser',  
                'allowAutoLogin' => false,  
        )  
));
Méthode d'appel finale

Code Php

Mais cela ne suffit pas également. Filtre du contrôleur. Nous devons personnaliser un filtre pour mettre en œuvre la vérification et la vérification d'un autre utilisateur
//全局应用  
Yii::app()->getComponent('adminUser');  
//在模块中  
Yii::app()->controller->module->getComponent('adminUser');

La première étape consiste à personnaliser un filtre :
Code PHP
<.>

Réécrivez ensuite la méthode filterAccessController de la classe CController
class CAdminAccessControlFilter extends CAccessControlFilter  
{  
    protected function preFilter($filterChain)  
    {  
        $app=Yii::app();  
        $request=$app->getRequest();  
        $user = Yii::app()->controller->module->getComponent(&#39;adminUser&#39;);  
        $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 !

Recommandations associées :

À 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn