Основные моменты аутентификации и авторизации в Yii.
Аутентификация — идентификация, установление личности (идентичности, identity) пользователя, ввод логина и пароля.
Авторизация — проверка прав уже идентифицированного пользователя (или анонимного) на доступ к данным.
Identity — индивидуальность, идентичность, подлинность, тождественность, личность.
Для аутентификации в Yii используются:
- компонент user (yii\web\User)
- интерфейс yii\web\IdentityInterface
В настройках компонента user (в конфигурации) нужно указать identityClass — класс, который будет содержать логику аутентификации. Как правило это класс модели, представляющий пользователя. Этот класс должен реализовывать интерфейс yii\web\IdentityInterface.
Интерфейс yii\web\IdentityInterface включает следующие методы:
- findIdentity() — поиск пользователя (личности, identity) по Id, а точнее поиск экземпляра класса, реализующего интерфейс IdentityInterface. Метод используется для сохранения статуса идетнификации пользователя в сессию
- findIdentityByAccessToken() — тоже самое, но по знаку доступа. Применяется для аутентификации в RESTfull приложениях
- getId() — возвращает Id пользователя (личности, identity)
- getAuthKey() — возвращает ключ аутентификации сохраненный на сервере для валидации ключа, сохраненного в куку при логине (в процессе аутентификации). Ключи сравниваются для установления валидности ключа из куки
- validateAuthKey() — валидация ключа аутентификации, сохраненного в куку
Реализовывать все методы не обязательно, не нужные можно оставить с пустым телом. В простых MVC приложениях используются методы findIdentity(), getAuthKey(), validateAuthKey() и getId(), в REST приложениях — findIdentityByAccessToken() и getId().
Класс, реализующий интерфейс yii\web\IdentityInterface, может одновременно наследоваться от ActiveRecord.
В контроллерах можно использовать статические методы и свойства компонента user (yii\web\User) для идентификации пользователя:
- Yii::$app->user->identity — возвращает экземпляр класса представляющий залогиненного пользователя или null если пользователь не аутентифицирован
- Yii::$app->user->id — возвращает id залогиненного пользователя (null для не аутентифицорованных)
- Yii::$app->user->isGuest — true если пользователь не аутентифицирован
- Yii::$app->user->login($identity) — залогинивает пользователя
- Yii::$app->user->logout() — разлогинивает пользователя