Laravel-Multiauth не работает в Laravel 5.2

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

Мой Auth.php

 <?php return [ 'multi' => array( 'user' => array( 'driver' => 'eloquent', 'model' => 'App\User', 'table' => 'users', ), 'admin' => array( 'driver' => 'database', 'model' => 'App\Admin', 'table' => 'tbl_admin_user', ) ), 'password' => [ 'email' => 'emails.password', 'table' => 'password_resets', 'expire' => 60, ], ]; 

Мой App.php

 'providers' => [ /* * Laravel Framework Service Providers... */ //Illuminate\Auth\AuthServiceProvider::class, Ollieread\Multiauth\MultiauthServiceProvider::class, Illuminate\Broadcasting\BroadcastServiceProvider::class, Illuminate\Bus\BusServiceProvider::class, Illuminate\Cache\CacheServiceProvider::class, Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, Illuminate\Cookie\CookieServiceProvider::class, Illuminate\Database\DatabaseServiceProvider::class, Illuminate\Encryption\EncryptionServiceProvider::class, Illuminate\Filesystem\FilesystemServiceProvider::class, Illuminate\Foundation\Providers\FoundationServiceProvider::class, Illuminate\Hashing\HashServiceProvider::class, Illuminate\Mail\MailServiceProvider::class, Illuminate\Pagination\PaginationServiceProvider::class, Illuminate\Pipeline\PipelineServiceProvider::class, Illuminate\Queue\QueueServiceProvider::class, Illuminate\Redis\RedisServiceProvider::class, Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, Illuminate\Session\SessionServiceProvider::class, Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, /* * Application Service Providers... */ App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, ], /* |-------------------------------------------------------------------------- | Class Aliases |-------------------------------------------------------------------------- | | This array of class aliases will be registered when this application | is started. However, feel free to register as many as you wish as | the aliases are "lazy" loaded so they don't hinder performance. | */ 'aliases' => [ 'App' => Illuminate\Support\Facades\App::class, 'Artisan' => Illuminate\Support\Facades\Artisan::class, 'Auth' => Illuminate\Support\Facades\Auth::class, 'Blade' => Illuminate\Support\Facades\Blade::class, 'Cache' => Illuminate\Support\Facades\Cache::class, 'Config' => Illuminate\Support\Facades\Config::class, 'Cookie' => Illuminate\Support\Facades\Cookie::class, 'Crypt' => Illuminate\Support\Facades\Crypt::class, 'DB' => Illuminate\Support\Facades\DB::class, 'Eloquent' => Illuminate\Database\Eloquent\Model::class, 'Event' => Illuminate\Support\Facades\Event::class, 'File' => Illuminate\Support\Facades\File::class, 'Gate' => Illuminate\Support\Facades\Gate::class, 'Hash' => Illuminate\Support\Facades\Hash::class, 'Lang' => Illuminate\Support\Facades\Lang::class, 'Log' => Illuminate\Support\Facades\Log::class, 'Mail' => Illuminate\Support\Facades\Mail::class, 'Password' => Illuminate\Support\Facades\Password::class, 'Queue' => Illuminate\Support\Facades\Queue::class, 'Redirect' => Illuminate\Support\Facades\Redirect::class, 'Redis' => Illuminate\Support\Facades\Redis::class, 'Request' => Illuminate\Support\Facades\Request::class, 'Response' => Illuminate\Support\Facades\Response::class, 'Route' => Illuminate\Support\Facades\Route::class, 'Schema' => Illuminate\Support\Facades\Schema::class, 'Session' => Illuminate\Support\Facades\Session::class, 'Storage' => Illuminate\Support\Facades\Storage::class, 'URL' => Illuminate\Support\Facades\URL::class, 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class, ], ]; 

Когда я запустил проект, я увидел ошибку

Вызов неопределенного метода Illuminate \ Foundation \ Application :: bindShared () в строке MultiauthServiceProvider.php 13

Я изменил MultiAuthServiceProvider.php на

 $this->app->singleton('auth', function ($app) { $app['auth.loaded'] = true; return new \Ollieread\Multiauth\MultiManager($app); }); 

и теперь я вижу эту ошибку, как показано на скриншоте введите описание изображения здесь Я не уверен, что пытается создать экземпляр Gate Facade

Solutions Collecting From Web of "Laravel-Multiauth не работает в Laravel 5.2"

Вместо того, чтобы создавать пользовательские мультифайлы, я рекомендую вам использовать Laravel custom auth guard и auth provider . Честно, второй метод еще не проверен, но я думаю, что он должен работать.

1. Одна модель множественного охранника

На вашем config/auth.php добавьте новый охранник:

 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], // new guard for admin using the same model and table. 'admin' => [ 'driver' => 'session', 'provider' => 'users', ], ], 

Затем группируйте свои маршруты с помощью auth:admin , конечно же, вам также нужно создать другое промежуточное программное обеспечение, которое может проверить, является ли текущий пользователь пользователем admin. Чтобы получить аутентифицированный пользовательский экземпляр, вам нужно указать настраиваемый защитник: Auth::guard('admin')->user() .

Чтобы убедиться, что это сработало, создайте два маршрута group one с промежуточным программным обеспечением auth и один с промежуточным программным обеспечением auth:admin , когда вы вошли в систему пользователя на маршрутах, использующих auth:admin попробуйте обратиться к другой группе маршрутов, вас попросят снова войти в систему.

 Route::group(['middleware' => 'auth'], function () { Route::get('/', function () { return 'You are logged in using guard: web'; }); }); Route::group(['middleware' => 'auth:admin'], function () { Route::get('/admin', function () { return 'You are logged in using guard: admin'; }); }); 

2. Несколько моделей

Снова в config/auth.php создайте новый пользовательский поставщик:

 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], 'admins' => [ 'driver' => 'eloquent', 'model' => App\Admin::class', ], ], 

Затем создайте специальный защитник с admins качестве поставщика:

 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], // new guard for admin using custom provider. 'admin' => [ 'driver' => 'session', 'provider' => 'admins', ], ], 

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