Важная информация
RSS лента

Rovico

Yii2 PHP Framework. Установка и настройка часть 2. Аутентификация в админке.

Оценить эту запись
Настройка для аутентификации в админке

В предыдущей статье я вкратце описал установку Yii2 на AMP OpenServer.
Следующим пунктом я решил сделать аутентификацию в админке с использованием соей старой базы данных от Yii1.1.
На случай, если я буду использовать свою админку на shared хостинге, где у меня не будет возможности расположить её на поддомене я добавил в конфиг \backend\config\main.php настройки для request, user и session:

PHP Code:
  1. 'components' => [
  2.  
  3. # Настройка класса запросов (GET,POST)
  4. 'request' => [
  5. 'csrfParam' => '_backendCSRF',
  6.  
  7. // Настройка куки для защиты csrf
  8. 'csrfCookie' => [
  9. 'httpOnly' => true,
  10. 'path' => '/'
  11. ],
  12. ],
  13.  
  14. # Пользователь
  15. 'user' => [
  16. 'identityClass' => 'common\models\User',
  17. 'enableAutoLogin' => true,
  18.  
  19. // Настройка куки для identity
  20. 'identityCookie' => [
  21. 'name' => '_backendIdentity',
  22. 'path' => '/',
  23. 'httpOnly' => true
  24. ],
  25. ],
  26.  
  27. # сессия backend
  28. 'session' => [
  29. 'name' => '_backendSession',
  30.  
  31. // Настройка куки для сессии
  32. 'cookieParams' => [
  33. 'path' => '/',
  34. 'httpOnly' => true,
  35. ],
  36. ],

В принципе, эти настройки нужны только в случае расположения админки не в поддомене, а на том же уровне, что и frontend, только в отдельной папке. И тогда настройки 'path' в каждом из блоков нужно перенастроить на admin/, как и было описано в предыдущей статье.

Кроме того, для аутентификации мне потребовалось доработать свою таблицу пользователей. По умолчанию её можно создать при помощи миграции. В консоли OpenServer надо набрать из корневой папки Yii2:

Код :
yii migrate/up

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

MySQL Code:
  1. CREATE TABLE `yiic_user` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `email` varchar(128) DEFAULT NULL,
  4.   `name` varchar(255) DEFAULT NULL,
  5.   `status` tinyint(2) NOT NULL DEFAULT '10',
  6.   `auth_key` varchar(32) NOT NULL,
  7.   `password_hash` varchar(128) NOT NULL,
  8.   `password_reset_token` varchar(128) NOT NULL,
  9.   `lastLogin` datetime DEFAULT NULL,
  10.   `created_at` int(11) NOT NULL,
  11.   `updated_at` int(11) NOT NULL,
  12.   `identity` varchar(255) NOT NULL,
  13.   `network` varchar(255) NOT NULL,
  14.   PRIMARY KEY (`id`),
  15.   UNIQUE KEY `password_reset_token` (`password_reset_token`),
  16.   UNIQUE KEY `email` (`email`)

При этом я решил не добавлять стандартное поле username и использовал вместо него поле email.
Обратите внимание на то, что активный пользователь должен иметь статус 10

В моей старой таблице уже был пользователь с id 1, который в старой системе был админом. Я решил оставить этого же пользователя, но сменить ему пароль. Заодно решил написать команду для сброса пароля админа (на всякий крайний случай) и научиться писать консольные команды Yii2.

Для этого в /console/controllers я создал класс команды AdminPwdController.

PHP Code:
  1. namespace console\controllers;
  2.  
  3. use Yii;
  4. use yii\console\Controller;
  5. use yii\db\Command;
  6.  
  7. class AdminPwdController extends Controller
  8. {
  9.     // The command "yii example/create test" will call "actionCreate('test')"
  10.     public function actionSet($pwd = 1234) {
  11. $result = Yii::$app->db->createCommand()
  12. ->update('{{%user}}', [
  13. 'password' => self::_hashPwd($pwd)
  14. ],'id=:id',[':id'=>1])->execute();
  15. echo 'Done! Affected ' . $result . ' rows...';
  16. }
  17.  
  18. private static function _hashPwd($pwd)
  19. {
  20. return Yii::$app->security->generatePasswordHash( $pwd );
  21. }
  22. }


Теперь, чтобы сбросить пароль админа (пользователя с Id=1) на любой нужный мне пароль я могу набрать в консоли:

Код :
yii admin-pwd/set q1w2e3r4t

P.S. Я знаю, что вышеуказанные изменения в базе данных пользователей и смену пароля админа нужно было сделать и при помощи миграции, но мне интересно было именно вручную. Я думаю, что миграцию по аналогии с /console/migrations/init написать не сложно.

Продолжение следует…
Метки: Нет Добавить / редактировать метки
Категории
Без категории

Комментарии