2015-09-23 2 views
1

У меня есть приложение, похожее на то, что хостинг-реселлеры получают нечто иное ... это приложение используется на domainA.com и domainB.com. Оба домена указывают на один сервер, поэтому оба сайта запускают одно приложение точно так же, как и файлы, и одну базу данных.Расширение аутентификации в Laravel 5.1

Когда пользователь обращается к domainA.com, мы увидим конкретные настройки для логотипа и цветовой схемы domainA. То же самое относится к domainB.com.

В то время как в обоих доменах используется единая база данных, я хочу, чтобы userA мог зарегистрироваться на domainA и domainB с тем же адресом электронной почты. Когда пользователь, чтобы попытаться войти в систему мы хотели бы использовать что-то подобное: (взято из http://laravel.com/docs/master/authentication#authenticating-users)

Auth::attempt(['email' => $email, 'password' => $password, 'site' => 'domainA.com']) 

Это функциональность, которая мне нужна нужна для того, чтобы сохранить данные отдельно, так что если вы входите в систему как adminA, который принадлежит на domainA.com вы увидите, что userA сделал на domainA.com, а adminA не видел, что сделал userA на domainB.com. То же самое относится к adminB, принадлежащему domainB.com, adminB не сможет увидеть, что userA сделал на domainA.com.

Я хотел бы знать о том, как в целом Authentication поставляется с Laravel 5 затронутым, если я должен был обновить по умолчанию AuthController @ создать метод с чем-то похожим на:

protected function create(array $data) 
    {   
     return User::create([ 
      'name' => $data['name'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']), 
      'site' => 'domainB.com' 
     ]); 
    } 

Я предполагаю, что напоминания пароля может быть легко модернизированы , а потому, что аутентификация Laravel включает в себя довольно много встроенных функций, это может создать проблему, если после того, как идентификатор пользователя для идентификации никогда используется для идентификации пользователя и выполнять основные функции


Update/это я где я нахожусь в

я сделал следующие

  1. Удалить уникальные условия в БД для электронной почты пользователей таблицы
  2. Изменено логина и зарегистрировать страницу, чтобы включить дополнительные пары «домен»
  3. Добавлен новый столбец «domain» в таблице пользователей - теперь пользователи принадлежат к доменам
  4. Промежуточное программное обеспечение должно быть создано для определения идентификатора домена от domains таблицы на начальном доступе к сайту.
  5. в таблице пользователей должны иметь электронную почту и Domain_ID установлен уникальный для предотвращения дублирования: UNIQUE INDEX unique_email_domain_id (email, domain_id)
  6. проверки на регистр страницы должны быть обновлены для электронной почты в функции валидатор и заменить что-то похожее на " уникальные: пользователи, электронная почта, NULL, идентификатор, Domain_ID, 1'

также создал промежуточное программное обеспечение для создания глобального переменного домена с данными, ниже первоначальный пример:

<?php 

namespace App\Http\Middleware; 

use Closure; 
use URL; 

class DomainRouter 
{ 
    /** 
    * Handle an incoming request. Setting up domain for given session. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     $domain= \App\Domain::where('domain', URL::to('/'))->firstOrFail(); 

     # config('domain')->id 
     config([ 
      'domain' => $domain 
     ]); 

     return $next($request); 
    } 
} 

Пришлось воссоздать логин, зарегистрировать и забыли пароль, воссоздав код, главным образом скопированный с основных контроллеров

ответ

0

Сайт не должен иметь отношения к базе данных, потому что на уровне db между пользователями и доменами не существует отношения.

Когда пользователь обращается к domainA.com, мы увидим конкретные настройки для domainA i.e логотип и цветовая схема. То же самое относится к domainB.com.

В то время как оба домена используют единую базу данных, я хочу, чтобы userA мог зарегистрироваться на домене A и домене B с тем же адресом электронной почты.

Вместо этого все, что вы делаете, отображает различную информацию или предоставляет различные функции между доменами.

Что вы должны сделать, вместо того, чтобы просто расширить функции аутентификации/фильтр, где при входе пользователя в конкретной области, вы либо определить область, в которой существует текущий маршрут перед применением данных/View/способность

экс :

MyController extends Controller 
{ 

     public function view(ViewRepository $view) 
    { 

      return $view->make('path.to.my.view') 
    } 
} 


} 

Где ViewRepository расширяет вид и перекрывает данные, передаваемые в представление на основе текущего домена маршрутов.

Вы можете получить супер фантазию и передать в любой файл репозитория домена, который действует как интерфейс/фильтр для любых «основных» функциональных возможностей, основанных на изменениях между двумя доменами ... Используйте этот метод только для того, что вам нужно действуют по-разному между доменами, расширяющими основные классы, которые вы разработали для поддержания принципов СУХОЙ.

+0

Спасибо за ответ. Что бы вы сделали в отношении паролей, как я понимаю в вашем примере, если пользователь меняет пароль, эти данные будут обновляться на всех сайтах, потому что у нас есть одна таблица пользователей. Я не хочу, чтобы пользователь видел какие-либо связи между доменами в системе. – user3402600

+0

Если вы хотите иметь отдельные пароли, это будет другой случай. Каждый пользователь будет рассматриваться как отдельные объекты, и вы можете игнорировать мой ответ? – ajameswolf

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