ΠΠΎΠ΄ΡΠ»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ
Yii2-user - Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠ· ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ° lowBase Ρ ΠΏΠ°Π½Π΅Π»ΡΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΠΎΠ»Π½ΡΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΠΎΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ., (*1)
- ΠΠ²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΠΏΠΎ Email (Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ)
- ΠΠ²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΡΠ΅ΡΠ΅Π· ΡΠΎΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΠΈ
- ΠΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠΎΠ»Ρ ΡΠ΅ΡΠ΅Π· Email
- ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΠΎΡΠΈΠ»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
- ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌ
- Π‘ΡΡΠ°Π½Ρ ΠΈ Π³ΠΎΡΠΎΠ΄Π° (ΠΠ°Π·Π° ΠΠΊΠΎΠ½ΡΠ°ΠΊΡΠ΅) ΠΈ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° ΠΏΡΠΎΡΠΈΠ»Ρ ΠΊ Π½ΠΈΠΌ
- Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ»Π΅ΠΉ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π΄ΠΎΠΏΡΡΠΊΠΎΠ², Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡΠ°Π²ΠΈΠ»
- ΠΠΈΠ΄ΠΆΠ΅ΡΡ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ, ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Online, ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° ΠΏΡΠΎΡΠΈΠ»Ρ ΠΊ ΡΠΎΡΠΈΠ°Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΡΠΌ (Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π²Ρ
ΠΎΠ΄Π°)
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΌΡΠ»ΡΡΠΈΡΠ·ΡΡΠ½ΠΎΡΡΠΈ
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΡ
ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΏΠΈΡΠ΅ΠΌ Π±Π΅Π· Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
php composer.phar require --prefer-dist lowbase/yii2-user "*"
ΠΈΠ»ΠΈ, (*2)
"lowbase/yii2-user": "*"
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
//-----------------------
// ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
//-----------------------
'user' => [
'identityClass' => 'lowbase\user\models\User',
'enableAutoLogin' => true,
'loginUrl' => ['/login'],
'on afterLogin' => function($event) {
lowbase\user\models\User::afterLogin($event->identity->id);
}
],
//--------------------------------------------------------
// ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ OAUTH Π΄Π»Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· ΡΠΎΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΠΈ,
// Π³Π΄Π΅ Π²ΠΌΠ΅ΡΠΎ ? ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ
// ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ ID ΠΈ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ.
// Π ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΠΊΠ°Π·Π°Π½Ρ ΡΡΡΠ»ΠΊΠΈ Π΄Π»Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
// Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ
ΡΠΎΡΠΈΠ°Π»ΡΠ½ΡΡ
ΡΠ΅ΡΡΡ
.
//--------------------------------------------------------
'authClientCollection' => [
'class' => 'yii\authclient\Collection',
'clients' => [
'vkontakte' => [
// https://vk.com/editapp?act=create
'class' => 'lowbase\user\components\oauth\VKontakte',
'clientId' => '?',
'clientSecret' => '?',
'scope' => 'email'
],
'google' => [
// https://console.developers.google.com/project
'class' => 'lowbase\user\components\oauth\Google',
'clientId' => '?',
'clientSecret' => '?',
],
'twitter' => [
// https://dev.twitter.com/apps/new
'class' => 'lowbase\user\components\oauth\Twitter',
'consumerKey' => '?',
'consumerSecret' => '?',
],
'facebook' => [
// https://developers.facebook.com/apps
'class' => 'lowbase\user\components\oauth\Facebook',
'clientId' => '?',
'clientSecret' => '?',
],
'github' => [
// https://github.com/settings/applications/new
'class' => 'lowbase\user\components\oauth\GitHub',
'clientId' => '?',
'clientSecret' => '?',
'scope' => 'user:email, user'
],
'yandex' => [
// https://oauth.yandex.ru/client/new
'class' => 'lowbase\user\components\oauth\Yandex',
'clientId' => '?',
'clientSecret' => '?',
],
],
],
//---------------------------------------------
// ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠ°Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ
// Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΠ±ΠΎΡΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Yii2 RBAC.
//---------------------------------------------
'authManager' => [
'class' => 'yii\rbac\DbManager',
'itemTable' => 'lb_auth_item',
'itemChildTable' => 'lb_auth_item_child',
'assignmentTable' => 'lb_auth_assignment',
'ruleTable' => 'lb_auth_rule'
],
//-------------------------------------------------
// ΠΡΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠΎΡΡΠΈΠ½Π³Π° Π΄Π»Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ
// Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.
//-------------------------------------------------
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
//ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Π½Π° ΡΠ°ΠΉΡΠ΅
'<action:(login|logout|signup|confirm|reset|profile|remove|online)>' => 'lowbase-user/user/<action>',
//ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Π² ΠΏΠ°Π½Π΅Π»ΠΈ Π°Π΄ΠΌΠΈΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
'admin/user/<action:(index|update|delete|view|rmv|multidelete|multiactive|multiblock)>' => 'lowbase-user/user/<action>',
//ΠΠ²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΡΠ΅Π· ΡΠΎΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΠΈ
'auth/<authclient:[\w\-]+>' => 'lowbase-user/auth/index',
//ΠΡΠΎΡΠΌΠΎΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
'user/<id:\d+>' => 'lowbase-user/user/show',
//ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠΎ ΡΡΡΠ°Π½Π°ΠΌΠΈ Π² ΠΏΠ°Π½Π΅Π»ΠΈ Π°Π΄ΠΌΠΈΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
'admin/country/<action:(index|create|update|delete|view|multidelete)>' => 'lowbase-user/country/<action>',
//ΠΠΎΠΈΡΠΊ Π½Π°ΡΠ΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠ½ΠΊΡΠ° (Π³ΠΎΡΠΎΠ΄Π°)
'city/find' => 'lowbase-user/city/find',
//ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π³ΠΎΡΠΎΠ΄Π°ΠΌΠΈ Π² ΠΏΠ°Π½Π΅Π»ΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
'admin/city/<action:(index|create|update|delete|view|multidelete)>' => 'lowbase-user/city/<action>',
//Π Π°Π±ΠΎΡΠ° Ρ ΡΠΎΠ»ΡΠΌΠΈ ΠΈ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠ°Π² Π΄ΠΎΡΡΡΠΏΠ°
'admin/role/<action:(index|create|update|delete|view|multidelete)>' => 'lowbase-user/auth-item/<action>',
//Π Π°Π±ΠΎΡΠ° Ρ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π΄ΠΎΡΡΡΠΏΠ°
'admin/rule/<action:(index|create|update|delete|view|multidelete)>' => 'lowbase-user/auth-rule/<action>',
],
],
//-----------------------
// ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°ΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ
//-----------------------
'modules' => [
'gridview' => [
'class' => '\kartik\grid\Module'
],
'lowbase-user' => [
'class' => '\lowbase\user\Module',
],
],
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅!!!
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ lowbase-user Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅. Π’.ΠΊ. ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Ρ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ (Π΄Π»Ρ ΠΊΠ°ΡΡΠΎΠΌΠΈΠ·Π°ΡΠΈΠΈ) ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ captchaAction
ΠΈ baseAuthUrl
Π΄Π»Ρ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ
ΠΊΠ°ΠΏΡΠΈ ΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· ΡΠΎΡ. ΡΠ΅ΡΠΈ., (*3)
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡ ΠΠ
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:, (*4)
php yii migrate/up --migrationPath=@vendor/lowbase/yii2-user/migrations
ΠΠΈΠ³ΡΠ°ΡΠΈΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΡΡ ΠΈΡ
ΠΏΡΠ΅Π΄ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ
ΠΏΠΎ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΡ. ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ 2 ΡΠΎΠ»ΠΈ: ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ ΠΈ ΠΌΠΎΠ΄Π΅ΡΠ°ΡΠΎΡ:, (*5)
//ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
const ADMIN_FIRST_NAME = 'ΠΠΌΡ_Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°';
const ADMIN_LAST_NAME = 'Π€Π°ΠΌΠΈΠ»ΠΈΡ_Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°';
const ADMIN_EMAIL = 'admin@example.ru';
const ADMIN_PASSWORD = 'admin';
//ΠΠΎΠ΄Π΅ΡΠ°ΡΠΎΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
const MODERATOR_FIRST_NAME = 'ΠΠΌΡ_ΠΌΠΎΠ΄Π΅ΡΠ°ΡΠΎΡΠ°';
const MODERATOR_LAST_NAME = 'Π€Π°ΠΌΠΈΠ»ΠΈΡ_ΠΌΠΎΠ΄Π΅ΡΠ°ΡΠΎΡΠ°';
const MODERATOR_EMAIL = 'moderator@example.ru';
const MODERATOR_PASSWORD = 'moderator';
Π’Π°Π±Π»ΠΈΡΡ ΡΡΡΠ°Π½Ρ ΠΈ Π³ΠΎΡΠΎΠ΄Π° Π±ΡΠ΄ΡΡ ΠΏΡΡΡΡΠΌΠΈ. ΠΡΠ»ΠΈ Ρ
ΠΎΡΠΈΡΠ΅ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ ΠΈΡ
Π·Π°ΠΏΠΈΡΡΠΌΠΈ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΠΊΠΎΠ½ΡΠ°ΠΊΡΠ΅, ΡΠΎ
Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ Π² Π±Π°Π·Ρ ΡΠ°ΠΉΠ» ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΠΌΠΈ:, (*6)
dump_city.sql
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΡΡΠ°Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ
'modules' => [
'user' => [
'class' => '\lowbase\user\Module',
'customViews' => [
// ΠΠ΅Π½ΡΠ΅ΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠΈΠ»Ρ
'login' => '@app/views/user/profile'
]
],
],
// ΠΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠ°ΡΡΠΎΠΌΠΈΠ·Π°ΡΠΈΠΈ:
//
// signup - ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ
// login - Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ
// profile - ΠΏΡΠΎΡΠΈΠ»Ρ
// repass - Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠΎΠ»Ρ
// show - ΠΏΡΠΎΡΠΌΠΎΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
// confirmEmail - ΡΠ°Π±Π»ΠΎΠ½ ΠΏΠΈΡΡΠΌΠ° ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ Email
// passwordResetToken - ΡΠ°Π±Π»ΠΎΠ½ ΠΏΠΈΡΡΠΌΠ° ΡΠ±ΡΠΎΡΠ° ΠΏΠ°ΡΠΎΠ»Ρ
ΠΠ°ΠΏΡΡΠΊ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ²
use lowbase\user\components\LoginWidget;
use lowbase\user\components\OnlineWidget;
use lowbase\user\components\AuthKeysManager;
use lowbase\user\components\AuthChoice;
// ΠΠΈΠ΄ΠΆΠ΅Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ (Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΡΠΌΠΈ ΠΈΠΊΠΎΠ½ΠΊΠ°ΠΌΠΈ ΡΠΎΡ. ΡΠ΅ΡΠ΅ΠΉ)
= LoginWidget::widget(['oauth' => false]) ?>
// ΠΠΈΠ΄ΠΆΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΡΡΡΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Online (Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠΏΡΠΎΡΠ° 300 ΡΠ΅ΠΊΡΠ½Π΄)
= OnlineWidget::widget(['time' => 300]) ?>
// ΠΠΈΠ΄ΠΆΠ΅Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· ΡΠΎΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΠΈ
= AuthChoice::widget([['baseAuthUrl' => ['/lowbase-user/auth/index']]]) ?>
// ΠΠΈΠ΄ΠΆΠ΅Ρ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΡΠΎΡΠΈΠ°Π»ΡΠ½ΡΡ
ΡΠ΅ΡΠ΅ΠΉ ΠΊ ΠΏΡΠΎΡΠΈΠ»Ρ
= AuthKeysManager::widget(['baseAuthUrl' => ['/lowbase-user/auth/index']]) ?>