16

コンストラクターに次のコントローラーがあります。

$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\AuthController@redirectToFacebook')->name('facebook_auth');
    Route::get('/auth/facebook/callback', 'Auth\AuthController@handleFacebookCallback')->name('facebook_callback');
    Route::get('/auth/facebook/unlink', 'Auth\AuthController@handleFacebookUnlink')->name('facebook_unlink');
}

にアクセスするauth/facebookと、auth/facebook/callbackまたはauth/facebook/unlinkログイン中にミドルウェアによって拒否され、ホームページに戻されます。

'except' ルールを 's に続けて指定しようとしたので、ルートと正確/に一致しますが、違いはありません。routes.phpデフォルトの「ログアウト」ルールが尊重されているのに、これらのルールが無視されている理由はありますか?

乾杯!

4

7 に答える 7

39

URI の代わりにメソッドの名前を渡す必要があります。

<?php
    
namespace App\Http\Controllers;
    
class MyController extends Controller {
    public function __construct() {
        $this->middleware('guest', ['except' => [
            'redirectToFacebook', 'handleFacebookCallback', 'handleFacebookUnlink'
        ]]);
    }
}

Laravel 5.3以降、流暢なインターフェースを使用してコントローラーでミドルウェアを定義できます。これは、多次元配列を使用するよりもきれいに見えます。

<?php

$this->middleware('guest')->except('redirectToFacebook', 'handleFacebookCallback', 'handleFacebookUnlink');
于 2016-01-10T22:13:35.497 に答える