2017-11-01 34 views
0

ユーザーが認証され、電子メールが/ adminページにアクセスするための特定の電子メールである場合にのみ、カスタムミドルウェアを作成したいと考えています。カスタムミドルウェア - 'Too Many Redirects' - Laravel

..私は私のカスタムルートを指定してリダイレクトが、それは常にあまりにも多くのリダイレクトを言うとき、けれども

短い説明

。中

  1. ユーザーがログイン - > /ホームにリダイレクト。
  2. ユーザーが/ adminにアクセスしようとしていて、そのメールがミドルウェアで指定されたものと違う場合は、/ homeにリダイレクトします。
  3. そのtrueの場合、私のミドルウェアが 'admin.verify'

    routesファイルと呼ばれる

/adminにそれらを聞かせて:

Route::get('/admin', '[email protected]')->name('admin.index'); 

AdminController:

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

class AdminController extends Controller 
{ 
    public function __construct(){ 
     $this->middleware(['auth', 'admin.verify']); 
    } 


    public function index(){ 
     return view('admin.test'); 
    } 
} 

ミドルウェア:

public function handle($request, Closure $next) 
    { 

     if (Auth::check() && Auth::User()->email == '[email protected]') { 
     return $next($request); 
     } else { 
     return redirect()->route('home'); 
     } 

マイホームルート:

GET|HEAD | home | home| App\Http\Controllers\[email protected] | web,auth 

ホームコントローラ:

class HomeController extends Controller 
{ 
    /** 
    * Create a new controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     $this->middleware('auth'); 
    } 

    /** 
    * Show the application dashboard. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function index() 
    { 
     return view('home'); 
    } 
} 
+0

あなたの 'home'ルートの定義を表示してください。 – Camilo

+1

あなたのミドルウェアはコントローラ内にないルートファイル内にあるはずです – Option

+0

@Optionなぜそれを言うのですか? [ミドルウェアをコントローラに追加する](https://laravel.com/docs/5.5/controllers#controller-middleware)が有効です。 – Camilo

答えて

1

利用$this->middleware ('admin.verify')の代わり$this->middleware(['auth, admin.verify]');。管理ミドルウェアとコンストラクタの両方がユーザーが認証されているかどうかを確認しているため、リダイレクトエラーが多すぎます。

+0

私はそれを元々持っていましたが、まだ何もしませんでした。同じエラー。 – Pegasus

+0

ユーザーが認証されていることを両方のミドルウェアが確認するのに問題があるのはなぜですか? – Camilo

+0

それはテストのためだけだった、心配しないでください...私はそれを削除! – Pegasus

関連する問題