Heim > Artikel > Backend-Entwicklung > So fügen Sie eine neue Benutzerüberprüfung in yii hinzu
Dieser Artikel ist eine detaillierte Analyse und Einführung in die Methode zum Hinzufügen einer neuen Benutzerüberprüfung in yii. Freunde, die sie benötigen, können darauf verweisen
1 Warum müssen Sie das tun? Einen neuen Benutzer hinzufügen? Verifizierung:
Weil ich das Website-Backend und das Frontend in derselben yii-Anwendung erstellen möchte. Und diese beiden Benutzerverifizierungen sind völlig unterschiedlich , daher sind zwei verschiedene Anmeldeseiten erforderlich und Benutzerinformationen müssen in verschiedenen Cookies oder Sitzungen gespeichert werden. Daher muss einer Anwendung eine Benutzerüberprüfung hinzugefügt werden
2 🎜>
Bevor wir die Benutzerüberprüfung anpassen, müssen wir zunächst die Überprüfungs- und Autorisierungsmethoden von yii herausfinden.Um einen Benutzer zu überprüfen, müssen wir eine Überprüfungsklasse mit Überprüfungslogik definieren Zur Implementierung in der IUserIdentity-Schnittstelle können verschiedene Klassen unterschiedliche Überprüfungsmethoden implementieren. Für die Website-Anmeldung ist im Allgemeinen die CUserIdentity-Klasse erforderlich, die im Allgemeinen zur Überprüfung von Benutzernamen und Passwörtern verwendet wird Es ist die Methode „authenticate()“, um unsere eigene
-Überprüfungsmethode zu implementieren. Der spezifische Code lautet wie folgt:
PHP-Code
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; } }
Wenn sich der Benutzer anmeldet, lautet der folgende Code aufgerufen:
// 使用提供的用户名和密码登录用户 $identity=new UserIdentity($username,$password); if($identity->authenticate()) Yii::app()->user->login($identity); else echo $identity->errorMessage;
Wenn der Benutzer das Programm verlässt, wird der folgende Code aufgerufen:
PHP-Code
// 注销当前用户 Yii::app()->user->logout(); 其中的user是yii的一个components.需要在protected/config/main.php中定义PHP-Code
'user'=>array( // enable cookie-based authentication 'allowAutoLogin'=>true, 'loginUrl' => array('site/login'), ),Hier haben wir den Klassennamen des Benutzers nicht angegeben, da der Benutzer in Yii standardmäßig eine Instanz der CWebUser-Klasse ist.
Wir haben jetzt die Überprüfung der Benutzeranmeldung implementiert Unabhängig davon, ob der Benutzer angemeldet ist oder nicht, kann auf alle Aktionen zugegriffen werden. Der nächste Schritt besteht darin, den Benutzerzugriff über den Zugriffskontrollfilter zu autorisieren ein einfacher Controller mit Zugriffskontrolle:
PHP-Code
class AdminDefaultController extends CController { public function filters() { return array('accessControl'); } public function accessRules() { return array( array( 'allow', 'users' => array('@'), ), array( 'deny', 'users' => array('*') ), ); } }Wir legen bestimmte Filter in der Filtermethode fest. Wir können sehen, dass das von der Filtermethode zurückgegebene Array einen accessControl-Parameter enthält ist eine filterAccessControl-Methode in der CController-Klasse:
PHP-Codepublic function filterAccessControl($filterChain)
{
$filter=new CAccessControlFilter;
$filter->setRules($this->accessRules());
$filter->filter($filterChain);
}
Erstellen Sie darin eine neue CAccessControlFilter-Instanz und übergeben Sie die Parameter, die von der accessRules()-Methode zurückgegeben werden, wenn setRules.
Und alle spezifischen Autorisierungsregeln sind in accessRules definiert:
Php-Codepublic 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('*'),
),
);
}
3. Fügen Sie ein neues Verifizierungssystem hinzu:Zuerst erben wir einen CAdminUser von CWebUser:
Php-Code class CAdminWebUser extends CWebUser
{
public $loginUrl = array('admin/admin/login');
}
Wir müssen Es in Komponenten platzieren
Wenn es sich um eine globale Anwendung handelt, übergeben Sie den Komponentenabschnitt von protected/config/main.php:
PHP-Code'user'=>array(
// enable cookie-based authentication
'class' => 'CAdminUser',
'allowAutoLogin'=>true,
'loginUrl' => array('site/login'),
),
PHP-Code$this->setComponents(array(
'adminUser' => array(
'class' => 'CAdminWebUser',
'allowAutoLogin' => false,
)
));
PHP-Code//全局应用
Yii::app()->getComponent('adminUser');
//在模块中
Yii::app()->controller->module->getComponent('adminUser');
Aber das reicht nicht aus, wir müssen auch den Filter des Controllers ändern. Wir müssen einen Filter anpassen, um die Überprüfung und Autorisierung eines anderen Benutzers zu implementieren
Der erste Schritt besteht darin, einen Filter anzupassen:
PHP-Code 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;
}
}
PHP-Code public function filterAccessControl($filterChain)
{
$filter = new CAdminAccessControlFilter();
$filter->setRules($this->accessRules());
$filter->filter($filterChain);
}
//在这里我们使用自定义的filter类替换了原来的filter
OK, hier können wir in den accessRules() dieses Controllers angeben, dass der Administrator berechtigt ist
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für alle hilfreich sein Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website!
Über die Implementierung der Anmeldefunktion im Yii-Framework von PHP
So ändern Sie yii2 .0 Benutzer Die für die Anmeldung verwendete Benutzertabelle besteht aus anderen Tabellen
Das obige ist der detaillierte Inhalt vonSo fügen Sie eine neue Benutzerüberprüfung in yii hinzu. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!