Qudrat Qodirov

Yii2 basic, авторизация и регистрация через БД

Для начала у нас должен быть уже установлен yii2 basic. Настраиваем соединение с БД в файле /config/db.php и приступаем.

Добавляем авторизацию на сайте в Yii2 basic

Открываем консоль и добавляем миграцию для создания таблицы User

Открываем файл с миграцией /migration/m000000_000000_create_user_table.php и добавляем код создания миграции, особо выдумывать не будем и сделаем такую же как и в версии advanced:

После сохранения правок в файле миграции (копируйте только код методов up() и down()), выполняем ее в консоле:

Правим модель /models/User.php:

Авторизация готова, теперь добавим пользователя для проверки авторизации. Откроем контроллер /controllers/SiteController.php и добавим экшен в конец контроллера который поможет нам добавить пользователя:

Запускаем экшен: site.com/web/index.php?r=site/add-admin и проверяем авторизацию site.com/web/index.php?r=site/login

После успешной аворизации экшен AddAdmin можно удалить за ненадобнастью.

Если вам нужна только авторизация через БД в Yii2 basic, то на этом можно закончить. Если кроме авторизации через БД на сайте нужно добавить регистрацию и восстановление пароля, то продолжим.

Добавляем регистрацию на сайте в Yii2 basic

Для начала создадим модель для форм регистрации, для этого необходимо создать файл /models/SignupForm.php со следующим содержимым:

Далее необходимо добавить представление для регистрации, добавляем файл /views/site/signup.php со следующим содержимым:

И последнее, что необходимо сделать – это добавить регистрацию в меню. Открываем файл /views/layouts/main.phpнаходим виджет меню и добавляем пункт регистрации, после чего виджет с такого вида:

Примет вид:

Теперь у нас есть регистрация и авторизация в Yii2 basic.

Для полноценного функционала осталось только сделать сброс и восстановление пароля.

Добавляем восстановление пароля на сайте в Yii2 basic

Для начала необходимо модифицировать модель /models/User.php и добавить в нее несколько методов для создания и проверки токена сброса пароля:

В итоге модель /models/User.php будет выглядеть следующим образом:

Метод проверки токена сброса пароля isPasswordResetTokenValid используем переменную user.passwordResetTokenExpire для отмены токена сброса пароля, ее необходимо указать в файле /congif/params.php:

Далее необходимо добавить модель формы запроса на смену пароля и модель формы смены пароля. Итого 2 модели. Для начала добавим модель формы запроса на смену пароля /models/PasswordResetRequestForm.php со следующим содержимым:

Модель будет отправлять письмо с подтверждением смены пароля. Для этого она использует 2 лайоута (html и text), html у нас уже есть, необходимо добавить text. Для этого создадим файл /mail/layouts/text.php со следующим содержимым:

Также необходимо создать 2 представляения самого письма (html и text версии). Создадим html версию представления письма, для этого создаем файл /mail/passwordResetToken-html.php со следующим содержимым:

И представление для версии text /mail/passwordResetToken-text.php:

В качестве e-mail отправителя модель указывает e-mail из параметра supportEmail, его тоже нужно добавить. Для этого откройте на редактирование файл /config/params.php и добавьте в массив элемент supportEmail, в итоге получите примерно следующее:

Далее модель для формы смены пароля /models/ResetPasswordForm.php со следующим содержимым:

Теперь добавим экшены для работы с моделями описанными выше. Открываем контроллер /controllers/SiteController.php в use добавляем созданные модели и 2 действия (actionRequestPasswordReset и actionResetPassword):

Далее для этих двух действий необходимо добавить представления, начнем с формы запроса на смену пароля /views/site/passwordResetRequestForm.php:

И представление для формы смены пароля /views/site/resetPasswordForm.php:

Последний штрих, добавим ссылку на сброс пароля в представление формы авторизации, для этого открываем файл /views/site/login.php добавляем ссылку для сброса пароля:

В итоге представление авторизации на сайте будет выглядеть следующим образом:

В итоге мы получили полноценный функционал авторизации через БД, регистрации и сброса пароля в Yii2 basic используя функционал шаблона Yii2 advanced.

Авторизация в Yii2 по e-mail вместо username

Для авторизации на сайте мне больше нравится использование e-mail пользователя в качестве логина вместо ника, по умолчанию в yii2 используется ник в качестве логина. Исправить это довольно просто.

Начнем с модели /models/User.php, в ней необходимо добавить метод findByEmail для поиска пользователя по e-mail:

Далее в моделе /models/LoginForm.php меняем своойство (переменную) $username на $email в методе rules добавляем правило обработки e-mail [[’email’], ’email’] и в методе getUser() меняем вызов User::findByUsername($this->username) на User::findByEmail($this->email), вот что получится:

И последнее, в представлении /views/site/login.php меняем поле username на email:

 

Весь исходный код доступен на github: http://Весь исходный код доступен на github:

Обсуждение закрыто.