Процесс проверки личности пользователя называется аутентификацией . Обычно он использует имя пользователя и пароль, чтобы судить, является ли пользователь тем, на кого он претендует.
Чтобы использовать среду аутентификации Yii, вам необходимо:
- Настройте пользовательский компонент приложения.
- Реализуйте интерфейс yii \ web \ IdentityInterface.
Базовый шаблон приложения поставляется со встроенной системой аутентификации. Он использует пользовательский компонент приложения, как показано в следующем коде —
<?php $params = require(__DIR__ . '/params.php'); $config = [ 'id' => 'basic', 'basePath' => dirname(__DIR__), 'bootstrap' => ['log'], 'components' => [ 'request' => [ // !!! insert a secret key in the following (if it is empty) - this //is required by cookie validation 'cookieValidationKey' => 'ymoaYrebZHa8gURuolioHGlK8fLXCKjO', ], 'cache' => [ 'class' => 'yii\caching\FileCache', ], 'user' => [ 'identityClass' => 'app\models\User', 'enableAutoLogin' => true, ], //other components... 'db' => require(__DIR__ . '/db.php'), ], 'modules' => [ 'hello' => [ 'class' => 'app\modules\hello\Hello', ], ], 'params' => $params, ]; if (YII_ENV_DEV) { // configuration adjustments for 'dev' environment $config['bootstrap'][] = 'debug'; $config['modules']['debug'] = [ 'class' => 'yii\debug\Module', ]; $config['bootstrap'][] = 'gii'; $config['modules']['gii'] = [ 'class' => 'yii\gii\Module', ]; } return $config; ?>
В приведенной выше конфигурации класс идентификации для пользователя настроен как app \ models \ User.
Класс удостоверения должен реализовывать интерфейс yii \ web \ IdentityInterface с помощью следующих методов:
-
findIdentity () — ищет экземпляр класса идентификаторов, используя указанный идентификатор пользователя.
-
findIdentityByAccessToken () — ищет экземпляр класса идентификаторов, используя указанный токен доступа.
-
getId () — возвращает идентификатор пользователя.
-
getAuthKey () — возвращает ключ, используемый для проверки входа на основе файлов cookie.
-
validateAuthKey () — Реализует логику для проверки ключа входа на основе cookie.
findIdentity () — ищет экземпляр класса идентификаторов, используя указанный идентификатор пользователя.
findIdentityByAccessToken () — ищет экземпляр класса идентификаторов, используя указанный токен доступа.
getId () — возвращает идентификатор пользователя.
getAuthKey () — возвращает ключ, используемый для проверки входа на основе файлов cookie.
validateAuthKey () — Реализует логику для проверки ключа входа на основе cookie.
Модель User из базового шаблона приложения реализует все вышеперечисленные функции. Пользовательские данные хранятся в свойстве $ users —
<?php namespace app\models; class User extends \yii\base\Object implements \yii\web\IdentityInterface { public $id; public $username; public $password; public $authKey; public $accessToken; private static $users = [ '100' => [ 'id' => '100', 'username' => 'admin', 'password' => 'admin', 'authKey' => 'test100key', 'accessToken' => '100-token', ], '101' => [ 'id' => '101', 'username' => 'demo', 'password' => 'demo', 'authKey' => 'test101key', 'accessToken' => '101-token', ], ]; /** * @inheritdoc */ public static function findIdentity($id) { return isset(self::$users[$id]) ? new static(self::$users[$id]) : null; } /** * @inheritdoc */ public static function findIdentityByAccessToken($token, $type = null) { foreach (self::$users as $user) { if ($user['accessToken'] === $token) { return new static($user); } } return null; } /** * Finds user by username * * @param string $username * @return static|null */ public static function findByUsername($username) { foreach (self::$users as $user) { if (strcasecmp($user['username'], $username) === 0) { return new static($user); } } return null; } /** * @inheritdoc */ public function getId() { return $this->id; } /** * @inheritdoc */ public function getAuthKey() { return $this->authKey; } /** * @inheritdoc */ public function validateAuthKey($authKey) { return $this->authKey === $authKey; } /** * Validates password * * @param string $password password to validate * @return boolean if password provided is valid for current user */ public function validatePassword($password) { return $this->password === $password; } } ?>
Шаг 1 — Перейдите по URL-адресу http: // localhost: 8080 / index.php? R = site / login и войдите на веб-сайт, используя admin для входа в систему и пароля.
Шаг 2 — Затем добавьте новую функцию actionAuth () в SiteController.
public function actionAuth(){ // the current user identity. Null if the user is not authenticated. $identity = Yii::$app->user->identity; var_dump($identity); // the ID of the current user. Null if the user not authenticated. $id = Yii::$app->user->id; var_dump($id); // whether the current user is a guest (not authenticated) $isGuest = Yii::$app->user->isGuest; var_dump($isGuest); }
Шаг 3 — Введите адрес http: // localhost: 8080 / index.php? R = site / auth в веб-браузере, вы увидите подробную информацию об администраторе пользователя.
Шаг 4 — Для входа в систему и входа в систему, пользователь может использовать следующий код.
public function actionAuth() { // whether the current user is a guest (not authenticated) var_dump(Yii::$app->user->isGuest); // find a user identity with the specified username. // note that you may want to check the password if needed $identity = User::findByUsername("admin"); // logs in the user Yii::$app->user->login($identity); // whether the current user is a guest (not authenticated) var_dump(Yii::$app->user->isGuest); Yii::$app->user->logout(); // whether the current user is a guest (not authenticated) var_dump(Yii::$app->user->isGuest); }
Сначала мы проверяем, вошел ли пользователь в систему. Если значение возвращает false , то мы регистрируем пользователя с помощью вызова Yii :: $ app → user → login () и выходим из него с помощью приложения Yii :: $ app. → пользователь → выход из системы () .
Шаг 5 — Перейдите по URL http: // localhost: 8080 / index.php? R = site / auth , вы увидите следующее.
Класс yii \ web \ User вызывает следующие события:
EVENT_BEFORE_LOGIN — Возникает в начале yii \ web \ User :: login ()
EVENT_AFTER_LOGIN — Возникает после успешного входа
EVENT_BEFORE_LOGOUT — Возникает в начале yii \ web \ User :: logout ()
EVENT_AFTER_LOGOUT — Возникает после успешного выхода