Speak.Me Учить иностранные слова

Yii: аутентификация и авторизация

Основные моменты аутентификации и авторизации в 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() — разлогинивает пользователя