Иногда мы хотели бы разделить пользователей и администраторов в разных двух таблицах.
Я думаю, что это хорошая практика.
Поэтому я смотрел, возможно ли это в 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