自定义中间件 - '太多重定向' - Laravel

时间:2017-11-01 15:52:36

标签: php laravel laravel-5 middleware laravel-middleware

我想创建一个自定义中间件,只有在用户通过身份验证且电子邮件是某个电子邮件才能访问/ admin页面时。

虽然,当我指定自定义路线然后重定向时,它总是说太多重定向..

简短说明。

  1. 用户登录 - >重定向到/ home。 (工程)
  2. 如果用户尝试访问/ admin并且他们的电子邮件不像中间件中指定的那样,请重定向到/ home。
  3. 如果是真的,请将它们放入/ admin
  4. 我的中间件名为' admin.verify'

    路线档案

    Route::get('/admin', 'AdminController@index')->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 == 'Tester@gmail.com') {
            return $next($request);
          } else {
            return redirect()->route('home');
          }
    

    我的家乡路线:

     GET|HEAD | home | home| App\Http\Controllers\HomeController@index | 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');
        }
    }
    

2 个答案:

答案 0 :(得分:1)

使用$this->middleware ('admin.verify')代替$this->middleware(['auth, admin.verify]');。您收到的重定向错误太多,因为管理中间件和构造函数都在检查用户是否经过身份验证。

答案 1 :(得分:0)

问题是,当您访问本地路由时,将调用auth.verify方法,当该方法失败时,它将被重定向到本地本身,从而创建一个循环,因此重定向错误太多。

更改auth.verify中间件中的else条件以重定向到另一个页面,如/ login