Как использовать аутентификацию для нескольких таблиц в Laravel 5

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

Поэтому я смотрел, возможно ли это в Laravel 5.

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

Поэтому я потратил некоторое время на поиск исходного кода и, наконец, нашел способ добиться этого.

Прежде чем читать следующее, вы должны иметь базовые знания в ServiceProvider, Facade и IoC в Laravel 5. Здесь мы идем.

Согласно документу Laravel, вы можете найти, что Facade 'Auth' ссылается на Illuminate\Auth\AuthManager , у которого есть волшебство __call (). Вы могли видеть, что основная функция не в AuthManager , а в Illuminate\Auth\Guard

У Guard есть Провайдер. У этого провайдера есть свойство $model , согласно которому EloquentUserProvider создаст эту модель с помощью "new $model" . Это все, что нам нужно знать. Вот код.

AdminAuthServiceProvider нужно создать AdminAuthServiceProvider .

 public function register(){ Auth::extend('adminEloquent', function($app){ // you can use Config::get() to retrieve the model class name from config file $myProvider = new EloquentUserProvider($app['hash'], '\App\AdminModel') return new Guard($myProvider, $app['session.store']); }) $app->singleton('auth.driver_admin', function($app){ return Auth::driver('adminEloquent'); }); } 

2.Facade:

 class AdminAuth extends Facade { protected static function getFacadeAccessor() { return 'auth.driver_admin'; } } 

3. добавьте псевдоним в ядро:

 'aliases' => [ //has to be beneath the 'Auth' alias 'AdminAuth' => '\App\Facades\AdminAuth' ] 

Надеюсь, это может быть полезно.

Я создал пакет laravel, где вы можете обрабатывать несколько аутентификаций.

Шаг 1: требуется композитор

Во-первых, композитор требует многоадресный пакет

 composer require sarav/laravel-multiauth dev-master 

Шаг 2. Замена поставщика услуг auth по умолчанию.

замещать

 Illuminate\Auth\AuthServiceProvider::class 

с

 Sarav\Multiauth\MultiauthServiceProvider 

в файле config / app.php

Шаг 3: Изменить auth.php

Измените файл config / auth.php на что-то вроде этого

 'multi' => [ 'user' => [ 'driver' => 'eloquent', 'model' => App\User::class, 'table' => 'users' ], 'admin' => [ 'driver' => 'eloquent', 'model' => App\Admin::class, 'table' => 'admins' ] ], 

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

 \Auth::loginUsingId("user", 1); // Login user with id 1 \Auth::loginUsingId("admin", 1); // Login user with id 1 // Attempts to login user with email id johndoe@gmail.com \Auth::attempt("user", ['email' => 'johndoe@gmail.com', 'password' => 'password']); // Attempts to login admin with email id johndoe@gmail.com \Auth::attempt("admin", ['email' => 'johndoe@gmail.com', 'password' => 'password']); 

Для более подробной документации

http://sarav.co/blog/multiple-authentication-in-laravel/

http://sarav.co/blog/multiple-authentication-in-laravel-continued/

есть хорошие пакеты для обработки multi auth. проверьте эти ссылки:
пакет multiuth sboo

mohamednagy / multiauth