@Orc666

Можно ли реализовать поддоменую авторизацию на yii2?

Всем привет!
Проблема следующая, нужно реализовать кросс доменную авторизацию.
Схема такая:
1. На первом домене(user.mysite.com) находится личный кабинет пользователя который работает на yii2 и через который будет проходить авторизация.
2. На втором домене(mysite.com) находится интернет магазин на "самописном" движке который должен работать с авторизированным пользователем.
3. БД у них одна.
4. Лежат на одном сервере, в соседних каталогах.
5. должна быть реализована опция "запомнить меня"

Подскажите, можно ли это заставить работать? И как это лучше сделать?
  • Вопрос задан
  • 1034 просмотра
Пригласить эксперта
Ответы на вопрос 3
mhthnz
@mhthnz
PHP, YII2, Golang, Linux
Если у вас кастомный движок, то вам нужно забрать данные из Yii::$app->user->isGuest и Yii::$app->user->identity.
Желательно создайте отдельный конфиг без лишних компонентов, чтобы в components не было лишнего, вам ведь не нужна лишняя нагрузка. Далее в свой движок(в сессии) вставляете:
<?php
//Указываете правильные нижеидущие пути, относительно вашего движка
require(__DIR__ . '/../../vendor/autoload.php');
require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
require(__DIR__ . '/../../common/config/bootstrap.php'); //Если есть, путь до общего файла с алиасами
require(__DIR__ . '/../config/bootstrap.php'); //Если есть, путь до файла алиасов приложения

//Тут у вас ваш минимальный кофиг, без всего лишнего, обязательно в компонентах должен быть указан ваш класс User
$config = require(__DIR__ . '/../config/main.php');

//Создаем объект приложения
$app = new yii\web\Application($config);

//Вытаскиваем класс юзер
if (!$app->getUser()->isGuest) {
    echo 'Авторизирован!';
} else {
    echo 'Не авторизирован!';
}

//Вытаскиваем класс юзер нашего юи приложения, и в нем уже будут данные об авторизированном юзере
$userData = $app->getUser()->identity;

Далее все это дело совмещаете со своим движком.
Ответ написан
Комментировать
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
общая авторизация для приложения на поддоменаx работает на ура, без танцев с бубном, достаточно указать одинаковый
'cookieValidationKey'
Ответ написан
Комментировать
@Jorik86
Допустим есть 2 сайта:
site.ru и subdomain.site.ru

На site.ru конфигруация должна быть такая
'components' => [
 	....
 	'session' => ['cookieParams' => ['domain' =>  'site.ru', 'httpOnly' => true]],
 	'request' => [
            'cookieValidationKey' => 'КлючОдинаковый',
     ],
     'user' => [
          
            'identityClass' => 'app\models\User',
            'identityCookie' => ['name' => '_identity', 'httpOnly' => true,  'domain' =>   'site.ru'],
            'autoRenewCookie' => true,
            ....
    ],
  ....
]


На subdomain.site.ru конфигруация должна быть такая. По сути тоже самое только для cookie нужно поменять параметр domain.

'components' => [
 	....
 	'session' => ['cookieParams' => ['domain' =>  '.site.ru', 'httpOnly' => true]],
 	'request' => [
            'cookieValidationKey' => 'КлючОдинаковый',
     ],
     'user' => [
          
            'identityClass' => 'app\models\User',
            'identityCookie' => ['name' => '_identity', 'httpOnly' => true,  'domain' =>   '.site.ru'],
            'autoRenewCookie' => true,
            ....
    ],
  ....
]


Ну и app\models\User должен работать либо с одной таблицей пользователей. (либо ее репликой)
Теперь авторизуемся на site.ru и переходим subdomain.site.ru, Yii::$app->user->id должен быть установлен.

https://yii2-cookbook.readthedocs.io/cookies/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы