2017-11-21 12 views
1

is_adminのユーザのみが1であるようにするルートグループのミドルウェアを作成しようとしていますが、メッセージが現れます:Laravel 5.5グループミドルウェアがあなたにリダイレクトされました

このページは

ローカルホストはあなたに何回もリダイレクト機能していません。

これは私のミドルウェアです:

public function handle($request, Closure $next) 
{ 
    if ($request->user()->is_admin === 1) { 
    return redirect('/cms'); 
    } 

    return redirect('/contacts'); 
} 

私はKernel.phpに位置$middlewareGroupsの 'CMS' キー作成:

'cms' => [ 
    \App\Http\Middleware\AdminMiddleware::class, 
] 

そして、私のルートグループに割り当て:

Route::group(['middleware' => 'cms'], function() { 
    Route::get('/cms', '[email protected]')->name('cms'); 
}); 

アクセス/contactsは問題なく動作しますが、/cmsにアクセスすると上記のエラーが発生します。

+1

あなたが言っている: 私は仮定し、あなたがやりたいことは、単純にチェックした後、そのように何ルートポイントに続けることです/ cmsなどにリダイレクトするミドルウェア – Farkie

答えて

2

はこれです: あなたのルートはミドルウェアにあなたを指示します。ユーザーが実際に管理者であることが判明したら、リダイレクトを使用します。このリダイレクトはURL経由であるため、ルートを使用します。ルートはミドルウェアを再び使用します。 効果的に、無限ループを作成しました。 CMSは、その後ランを再れ、CMS /にリダイレクト/ IF ...

return $next($request); 
+0

あなたのソリューションは私を助けました。ありがとうございました。 – mfgabriel92

0

あなたが管理者であるかどうかを確認したい場合は、「はい」の場合は「cms」ルートに許可してください。その場合、リダイレクトは使用しないでください。単純にtrueを返します。何が起こっている

public function handle($request, Closure $next) 
{ 
    if ($request->user()->is_admin === 1) { 
    return true; 
    } 

    return redirect('/contacts'); 
} 
関連する問題