2015-11-12 18 views
0

我有一個網站,允許用戶通過社交AUTH寄存器使用Laravel socialite或傳統上使用登記表。我還創建了一個鏈接到用戶的配置文件控制器,它只能在登錄時訪問,因此我在配置文件控制器上使用了middleware('auth')傳統登錄給出InvalidArgumentException在Manager.php線90:驅動器[登錄]不支持

當我登錄傳統和試圖訪問一個輪廓,我得到以下錯誤InvalidArgumentException in Manager.php line 90: Driver [login] not supported.

例外的樣本信息是:

in Manager.php line 90 at Manager->createDriver('login') in Manager.php line 63 at Manager->driver('login') in Facade.php line 214 at Facade::__callStatic('driver', array('login')) in DinerAuthController.php line 77 at Socialite::driver('login') in DinerAuthController.php line 77 at DinerAuthController->redirectToProvider('login') at call_user_func_array(array(object(DinerAuthController), 'redirectToProvider'), array('provider' => 'login')) in Controller.php line 256 at Controller->callAction('redirectToProvider', array('provider' => 'login')) in ControllerDispatcher.php line 164 at ControllerDispatcher->call(object(DinerAuthController), object(Route), 'redirectToProvider') in ControllerDispatcher.php line 112

當我刪除中間件身份驗證,然後沒有錯誤。

有人遇到過類似的錯誤嗎? 任何人都可以通過一個可行的解決方案來幫助我

以下是涉及文件的示例代碼。

DinerAuthController.php

public function postDinerSignin(Request $request) 
{ 
    $this->validate($request, [ 
     'email' => 'required', 
     'password' => 'required', 
    ]); 
    if (! Auth::diner()->attempt(
     $request->only(['email', 'password']), 
     $request->has('remember') 
    )) { 
     return redirect()->route('dinerhome')->with('info', 'Could not sign you 
      in with those credentials.'); 
    } 
    $request->session()->put('user_id', Auth::diner()->get()->id); 

    return redirect()->route('dinerhome')->with('info', 'You are now signed in'); 
} 

public function redirectToProvider($provider) 
{ 
    return Socialite::driver($provider)->redirect(); 
} 

public function handleProviderCallback($provider) 
{ 
    try { 
     $user = Socialite::driver($provider)->user(); 
    } catch (Exception $e) { 
     return Redirect::to('auth/{provider}'); 
    } 

    $authUser = $this->findOrCreateUser($user); 

    Auth::diner()->login($authUser, true); 

    return redirect()->route('dinerhome'); 
} 

DinerAuthController.php線77是return Socialite::driver($provider)->redirect();

配置/ services.php:

'google' => [ 
    'client_id' => env('GOOGLE_ID'), 
    'client_secret' => env('GOOGLE_SECRET'), 
    'redirect' => env('GOOGLE_URL'), 
], 

'twitter' => [ 
    'client_id' => env('TWITTER_ID'), 
    'client_secret' => env('TWITTER_SECRET'), 
    'redirect' => env('TWITTER_URL'), 
], 

'facebook' => [ 
    'client_id' => env('FACEBOOK_ID'), 
    'client_secret' => env('FACEBOOK_SECRET'), 
    'redirect' => env('FACEBOOK_URL'), 
] 

DinerProfileController.php:

public function __construct() 
{ 
    $this->middleware('auth'); 
} 

回答

0

通過使用門門面授權問題解決了。 定義了能力之後,我通過Gate Facade進行了檢查,如果檢查失敗,則重定向用戶。

DinerProfileController.php

public function __construct() 
{ 
    if (Gate::denies('diner')) { 
     return redirect()->route('login')->send(); 
    } 
}