2016-01-10 48 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'