Yii2 user module

Как известно, в yii2 реализован механизм авторизации и аутентификации пользователей, который многие разработчики адаптируют под себя. Тем не менее, существует расширение yii2-user, которое прекрасно подходит для этих целей, а также расширяет функционал, поддерживает возможности авторизации через социальные сети и содержит механизм управления пользователями.

В данной статье будет описан механизм установки данного расширения для advanced шаблона.

Расширение yii2-user, которое мы будем использовать, доступно на github по ссылке. Там же вы можете ознакомиться с документацией более детально.

1. На первом шаге установим само расширение через composer:

composer require dektrium/yii2-user

В результате у вас должно быть что-то типа:

Using version ^0.9.12 for dektrium/yii2-user
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 3 installs, 0 updates, 0 removals
  - Installing yiisoft/yii2-httpclient (2.0.4): Loading from cache
  - Installing yiisoft/yii2-authclient (2.1.3): Loading from cache
  - Installing dektrium/yii2-user (0.9.12): Loading from cache
yiisoft/yii2-authclient suggests installing spomky-labs/jose (required for JWS,JWT or JWK related flows like OpenIDConnect)
Writing lock file
Generating autoload files

amigodev@amigocomp MINGW64 /c/xampp/sites/yii2

2. Выполним миграцию для модуля, чтобы создать и обновить необходимые таблицы в бд:

php yii migrate/up --migrationPath=@vendor/dektrium/yii2-user/migrations

Примечание: Рекомендуем предварительно удалить таблицу user, чтобы не возникало конфликтов при выполнении миграции.

Yii Migration Tool (based on Yii v2.0.12)

Total 12 new migrations to be applied:
        m140209_132017_init
        m140403_174025_create_account_table
        m140504_113157_update_tables
        m140504_130429_create_token_table
        m140830_171933_fix_ip_field
        m140830_172703_change_account_table_name
        m141222_110026_update_ip_field
        m141222_135246_alter_username_length
        m150614_103145_update_social_account_table
        m150623_212711_fix_username_notnull
        m151218_234654_add_timezone_to_profile
        m160929_103127_add_last_login_at_to_user_table

Apply the above migrations? (yes|no) [no]:y
*** applying m140209_132017_init
    > create table {{%user}} ... done (time: 0.010s)
    > create unique index {{%user_unique_username}} on {{%user}} (username) ... done (time: 0.010s)
    > create unique index {{%user_unique_email}} on {{%user}} (email) ... done (time: 0.010s)
    > create unique index {{%user_confirmation}} on {{%user}} (id, confirmation_token) ... done (time: 0.010s)
    > create unique index {{%user_recovery}} on {{%user}} (id, recovery_token) ... done (time: 0.010s)
    > create table {{%profile}} ... done (time: 0.010s)
    > add foreign key {{%fk_user_profile}}: {{%profile}} (user_id) references {{%user}} (id) ... done (time: 0.050s)
*** applied m140209_132017_init (time: 0.120s)

*** applying m140403_174025_create_account_table
    > create table {{%account}} ... done (time: 0.010s)
    > create unique index {{%account_unique}} on {{%account}} (provider,client_id) ... done (time: 0.010s)
    > add foreign key {{%fk_user_account}}: {{%account}} (user_id) references {{%user}} (id) ... done (time: 0.010s)
*** applied m140403_174025_create_account_table (time: 0.040s)

*** applying m140504_113157_update_tables
    > drop index {{%user_confirmation}} on {{%user}} ... done (time: 0.000s)
    > drop index {{%user_recovery}} on {{%user}} ... done (time: 0.000s)
    > drop column confirmation_token from table {{%user}} ... done (time: 0.020s)
    > drop column confirmation_sent_at from table {{%user}} ... done (time: 0.020s)
    > drop column recovery_token from table {{%user}} ... done (time: 0.020s)
    > drop column recovery_sent_at from table {{%user}} ... done (time: 0.020s)
    > drop column logged_in_from from table {{%user}} ... done (time: 0.020s)
    > drop column logged_in_at from table {{%user}} ... done (time: 0.020s)
    > rename column registered_from in table {{%user}} to registration_ip ... done (time: 0.000s)
    > add column flags integer NOT NULL DEFAULT 0 to table {{%user}} ... done (time: 0.010s)
    > rename column properties in table {{%account}} to data ... done (time: 0.010s)
*** applied m140504_113157_update_tables (time: 0.140s)

*** applying m140504_130429_create_token_table
    > create table {{%token}} ... done (time: 0.010s)
    > create unique index {{%token_unique}} on {{%token}} (user_id,code,type) ... done (time: 0.020s)
    > add foreign key {{%fk_user_token}}: {{%token}} (user_id) references {{%user}} (id) ... done (time: 0.010s)
*** applied m140504_130429_create_token_table (time: 0.050s)

*** applying m140830_171933_fix_ip_field
    > alter column registration_ip in table {{%user}} to bigint ... done (time: 0.020s)
*** applied m140830_171933_fix_ip_field (time: 0.020s)

*** applying m140830_172703_change_account_table_name
    > rename table {{%account}} to {{%social_account}} ... done (time: 0.010s)
*** applied m140830_172703_change_account_table_name (time: 0.010s)

*** applying m141222_110026_update_ip_field
    > alter column registration_ip in table {{%user}} to string(45) ... done (time: 0.010s)
*** applied m141222_110026_update_ip_field (time: 0.020s)

*** applying m141222_135246_alter_username_length
    > alter column username in table {{%user}} to string(255) NOT NULL ... done (time: 0.010s)
*** applied m141222_135246_alter_username_length (time: 0.030s)

*** applying m150614_103145_update_social_account_table
    > add column code string(32) NULL DEFAULT NULL to table {{%social_account}} ... done (time: 0.010s)
    > add column created_at integer NULL DEFAULT NULL to table {{%social_account}} ... done (time: 0.010s)
    > add column email string NULL DEFAULT NULL to table {{%social_account}} ... done (time: 0.020s)
    > add column username string NULL DEFAULT NULL to table {{%social_account}} ... done (time: 0.020s)
    > create unique index {{%account_unique_code}} on {{%social_account}} (code) ... done (time: 0.010s)
*** applied m150614_103145_update_social_account_table (time: 0.070s)

*** applying m150623_212711_fix_username_notnull
    > alter column username in table {{%user}} to string(255) NOT NULL ... done (time: 0.000s)
*** applied m150623_212711_fix_username_notnull (time: 0.010s)

*** applying m151218_234654_add_timezone_to_profile
    > add column timezone string(40) NULL DEFAULT NULL to table {{%profile}} ... done (time: 0.010s)
*** applied m151218_234654_add_timezone_to_profile (time: 0.010s)

*** applying m160929_103127_add_last_login_at_to_user_table
    > add column last_login_at integer to table {{%user}} ... done (time: 0.020s)
*** applied m160929_103127_add_last_login_at_to_user_table (time: 0.020s)


12 migrations were applied.

Migrated up successfully.

Ваша бд будет состоять из следующих таблиц:

3. В файл common/config/main.php добавляем строки:

'modules' => [
    'user' => [
        'class' => 'dektrium\user\Module',
        // you will configure your module inside this file
        // or if need different configuration for frontend and backend you may
        // configure in needed configs
    ],
],

4. В файл frontend/config/main.php добавляем:

'modules' => [
    'user' => [
        // following line will restrict access to admin controller from frontend application
        'as frontend' => 'dektrium\user\filters\FrontendFilter',
    ],
],

Поздравляем, если Вы все сделали правильно, модуль yii2-user будет установлен.

Важно помнить, что у расширения yii2-user есть свои страницы для регистрации, авторизации, управления пользователями и так далее. Полный список приводится ниже:

  • /user/registration/register Отображает регистрационную форму
  • /user/registration/resend Повторить отправку письма с подтверждением
  • /user/registration/confirm Подтверждение пользователя (требуются id и token параметры запроса)
  • /user/security/login Отображает форму авторизации
  • /user/security/logout Выход с сайта (доступен только POST метод)
  • /user/recovery/request Отображает форму восстановления
  • /user/recovery/reset Форма сброса пароля (требуются id и token параметры в запросе)
  • /user/settings/profile Страница профайла
  • /user/settings/account Настройка аккаунта (email, username, password)
  • /user/settings/networks Отображает соц. сети
  • /user/profile/show Отображает пользовательский профайл (requires id query param)
  • /user/admin/index Отображает пользовательский интерфейс

Теперь вы можете зайти по ссылке http://yii2/user/registration/register и зарегистрировать в системе первого пользователя:

После заполнения формы Вам на почту будет отправлено письмо. Убедитесь что у вас в файле common/config/main-local.php:

 'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            'viewPath' => '@common/mail',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
            'useFileTransport' => false,
 ],

параметр 'useFileTransport' => false, иначе почта будет записываться в файлы локально.

В письме будет представлена ссылка, при открытии которой аккаунт будет создан и активирован.

Также в файле: common/config/main.php:

 'user' => [
	        'class' => 'dektrium\user\Module',
	        'admins' => ['admin'],
	        // you will configure your module inside this file
	        // or if need different configuration for frontend and backend you may
	        // configure in needed configs
	    ],
	],

Строка 'admins' => ['admin'], говорит о том, что пользователь с логином "admin" будет административным и для него, к примеру, будет доступно управление пользователями по ссылке: http://yii2/user/admin:

На этом базовая часть установки модуля yii2-user окончена, при необходимости вы можете использовать свои шаблоны для всех страниц, профайлов, регистрации, восстановления пароля и расширять функционал под нужды проекта, использовать авторизацию через соц. сети и многое другое.

Поделиться: 




Чтобы оставить комментарий - авторизуйтесь




  Yii2   09.10.2017