Yii2 PHP Framework. Установка и настройка часть 2. Аутентификация в админке.
Настройка для аутентификации в админке
В предыдущей статье я вкратце описал установку Yii2 на AMP OpenServer.
Следующим пунктом я решил сделать аутентификацию в админке с использованием соей старой базы данных от Yii1.1.
На случай, если я буду использовать свою админку на shared хостинге, где у меня не будет возможности расположить её на поддомене я добавил в конфиг \backend\config\main.php настройки для request, user и session:
PHP Code:
'components' => [ # Настройка класса запросов (GET,POST) 'request' => [ 'csrfParam' => '_backendCSRF', // Настройка куки для защиты csrf 'csrfCookie' => [ 'httpOnly' => true, 'path' => '/' ], ], # Пользователь 'user' => [ 'identityClass' => 'common\models\User', 'enableAutoLogin' => true, // Настройка куки для identity 'identityCookie' => [ 'name' => '_backendIdentity', 'path' => '/', 'httpOnly' => true ], ], # сессия backend 'session' => [ 'name' => '_backendSession', // Настройка куки для сессии 'cookieParams' => [ 'path' => '/', 'httpOnly' => true, ], ],
В принципе, эти настройки нужны только в случае расположения админки не в поддомене, а на том же уровне, что и frontend, только в отдельной папке. И тогда настройки 'path' в каждом из блоков нужно перенастроить на admin/, как и было описано в предыдущей статье.
Кроме того, для аутентификации мне потребовалось доработать свою таблицу пользователей. По умолчанию её можно создать при помощи миграции. В консоли OpenServer надо набрать из корневой папки Yii2:
Код :yii migrate/up
Но я решил добавить новые поля к своей старой таблице пользователей. В итоге она приняла следующий вид:
MySQL Code:
При этом я решил не добавлять стандартное поле username и использовал вместо него поле email.
Обратите внимание на то, что активный пользователь должен иметь статус 10
В моей старой таблице уже был пользователь с id 1, который в старой системе был админом. Я решил оставить этого же пользователя, но сменить ему пароль. Заодно решил написать команду для сброса пароля админа (на всякий крайний случай) и научиться писать консольные команды Yii2.
Для этого в /console/controllers я создал класс команды AdminPwdController.
PHP Code:
namespace console\controllers; use Yii; use yii\console\Controller; use yii\db\Command; class AdminPwdController extends Controller { // The command "yii example/create test" will call "actionCreate('test')" public function actionSet($pwd = 1234) { $result = Yii::$app->db->createCommand() ->update('{{%user}}', [ 'password' => self::_hashPwd($pwd) ],'id=:id',[':id'=>1])->execute(); echo 'Done! Affected ' . $result . ' rows...'; } private static function _hashPwd($pwd) { return Yii::$app->security->generatePasswordHash( $pwd ); } }
Теперь, чтобы сбросить пароль админа (пользователя с Id=1) на любой нужный мне пароль я могу набрать в консоли:
Код :yii admin-pwd/set q1w2e3r4t
P.S. Я знаю, что вышеуказанные изменения в базе данных пользователей и смену пароля админа нужно было сделать и при помощи миграции, но мне интересно было именно вручную. Я думаю, что миграцию по аналогии с /console/migrations/init написать не сложно.
Продолжение следует…