2014-11-03 2 views
6

У меня есть веб-сервер Laravel, который управляет несколькими доменами, такими как:Laravel Междоменное Auth печенье и фильтры

site1.domain.com, site2.domain.com, site3.domain.com 

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

Для каждого сайта есть бэкэнд, например.

site1.domain.com/office 

Для этого у меня есть другой набор пользователей модели Admin. Чтобы сделать эту работу, у меня есть довольно сложный набор auth-путей, другой контроллер и все такое. Я достигаю этого со следующим фильтром.

App::before(function($request) 
{ 
    if ($request->is('office*')) 
    { 
    Config::set('auth.driver', 'eloquent.admin'); 
    Config::set('auth.model', 'Admin'); 

Эти администраторы являются общими для всех доменов. То есть имя пользователя уникально в модели администратора.

Это хорошо работает, но нужно двигаться дальше.

Я бы хотел, чтобы логин и выход были согласованы между сайтами. То есть, если администратор вошел в один офис сайта, они вошли в них все, и они вышли из системы, они вышли из них.

Я попытался обновить фильтр таким образом:

App::before(function($request) 
{ 
    if ($request->is('office*')) 
    { 
    Config::set('auth.driver', 'eloquent.admin'); 
    Config::set('auth.model', 'Admin'); 

    Config::set('session.path', '/office'); 
    Config::set('session.domain', '.domain.com'); // tried without leading . too 
    } 
}); 

Однако, если я анализирую свои куки в браузере, домен и информация о пути не была затронута и остается site.domain.com и/соответственно ,

Можете ли вы рассказать мне, как изменить атрибуты cookie сеанса на основе моего запроса?

Существует зависимость от сайта. В той мере, в которой существует множество отношений между администратором и сайтом, которое определяет, может ли администратор получить доступ к/офису конкретного сайта.

Я обеспокоен тем, что администратор вошел в систему, они получат доступ к любому сайту.

Мое намерение состоит в том, чтобы написать дополнительный фильтр «can admin this site», который будет проверять отношения.

Вы считаете это подходящей мерой в контексте предлагаемого междоменного auth для админов?

+0

Если вы не против, чтобы все пользователи делились между сайтами, вы можете просто изменить домен cookie на '.domain.com'. Другой вариант - создание нового средства проверки подлинности/модели, который генерирует/проверяет отдельные файлы cookie JWT. – Sigismund

ответ

0

Если вы открыли app/config/session.php, какой именно драйвер вы используете? Некоторые, такие как файл, похоже, не хранят данные через поддомены wild-card.

Я решает эту проблему с помощью Redis (если вы используете Homestead, он должен быть уже доступны для вас):

'driver' => 'redis', 

    'redis' => array(

    'cluster' => true, 

    'default' => array(
     'host'  => '127.0.0.1', 
     'port'  => 6379, 
     'database' => 0, 
    ), 

), 

Это сделать с тем, как различные драйверы используют имя хоста для ссылки на сессии данные.

Смежные вопросы