2016-06-01 4 views
1

laravel 5.2에 다중 인증을 구현하려고합니다. 나는Laravel- Multiauth가 Laravel에서 작동하지 않습니다. 5.2

this articleAuth.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, 

    ], 

]; 

정의되지 않은 메서드 호출 전자 \ 재단 \ 응용 프로그램 : bindShared() MultiauthServiceProvider.php 라인은

13

나는 변경된 MultiAuthServiceProvider.php
$this->app->singleton('auth', function ($app) { 
     $app['auth.loaded'] = true; 

     return new \Ollieread\Multiauth\MultiManager($app); 
    }); 

지금은 스크린 샷 첨부로이 오류를보고하고

enter image description here Gate Facade

답변

1

그런 다중 사용자 인증을 만드는 대신, Laravel custom auth 012를 사용하는 것이 좋습니다.및 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를 사용하여 경로 현재 사용자가 관리 사용자인지 여부 인증 된 사용자 인스턴스를 얻으려면 사용자 정의 가드 인 Auth::guard('admin')->user()을 지정해야합니다.

, 그것은 일 것 있는지 확인하십시오 당신은 당신이 다시 로그인하도록 요청해야 다른 경로 그룹에 액세스 할 수 auth:admin 시도를 사용하여 경로에 사용자가 로그인 한 경우, auth 미들웨어 및 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에 다시

, 새로운 사용자 지정 공급자 작성 :

'guards' => [ 
    'web' => [ 
     'driver' => 'session', 
     'provider' => 'users', 
    ], 

    'api' => [ 
     'driver' => 'token', 
     'provider' => 'users', 
    ], 

    // new guard for admin using custom provider. 
    'admin' => [ 
     'driver' => 'session', 
     'provider' => 'admins', 
    ], 
], 
:

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

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

그런 다음 공급자로 admins와 사용자 정의 가드를 만듭니다

사용 그의 방법은 사용자 정의 미들웨어를 만들 필요가 없습니다. auth:admin을 사용해야합니다.

+0

이 답변에서 설명한대로 'Laravel'방법을 시도했습니다. http : // stackoverflow./ 예/34614753/can-anyone-explain-laravel-5-2-multi-auth-with-example하지만 사용자 테이블에서만 나를 등록합니다. – baig772

+0

'Admin' 사용자를 등록하면'users' 표? 그렇다면'AuthController'의'create()'메소드에서 여전히'User' 모델을 사용해야합니다. – Rifki

+0

admin auth에 대한'AuthController'에도'protected $ guard = 'admin';이 속성을 추가하여 사용자 정의 가드를 지정해야합니다. – Rifki