2016-01-10 96 views
2

我有一個在構造以下控制器規則:Laravel中間件「除了」不工作

$this->middleware('guest', ['except' => 
    [ 
     'logout', 
     'auth/facebook', 
     'auth/facebook/callback', 
     'auth/facebook/unlink' 
    ] 
]); 

的「註銷」規則(這是有默認)的作品完美,但其他3條規則我有添加被忽略。在routes.php的路線是這樣的:

Route::group(['middleware' => ['web']],function(){ 

    Route::auth(); 

    // Facebook auth 
    Route::get('/auth/facebook', 'Auth\[email protected]')->name('facebook_auth'); 
    Route::get('/auth/facebook/callback', 'Auth\[email protected]')->name('facebook_callback'); 
    Route::get('/auth/facebook/unlink', 'Auth\[email protected]')->name('facebook_unlink'); 
} 

如果我訪問auth/facebookauth/facebook/callbackauth/facebook/unlink同時登錄我得到中間件否認,扔回到主頁。

我試着指定的'除外'規則,所以它們完全匹配routes.php的路線,但沒有區別。任何想法爲什麼這些規則被忽略,而默認的「註銷」規則是受到尊重的?

乾杯!

回答

8

您應該通知方法名稱,而不是URI。

<?php 

namespace App\Http\Controllers; 

class MyController extends Controller { 
    public function __construct() { 
     $this->middleware('guest', ['except' => [ 
      'redirectToFacebook', 'handleFacebookCallback', 'handleFacebookUnlink' 
     ]]); 
    } 
} 
0

如果你想跟隨Laravel文檔,另一種解決方案是通過添加路由到$除了在/Http/Middleware/VerifyCsrfToken.php文件變量建議。文檔說將它們加入到這樣的:

'route/*' 

但我發現得到它的唯一方法是通過將路由忽略這樣的:

'/route'