Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 定制中间件&x27;重定向过多';-拉维尔_Php_Laravel_Laravel 5_Middleware_Laravel Middleware - Fatal编程技术网

Php 定制中间件&x27;重定向过多';-拉维尔

Php 定制中间件&x27;重定向过多';-拉维尔,php,laravel,laravel-5,middleware,laravel-middleware,Php,Laravel,Laravel 5,Middleware,Laravel Middleware,我想创建一个自定义中间件,仅当用户经过身份验证并且电子邮件是访问/admin页面的特定电子邮件时,该中间件才可用 虽然,当我指定自定义路由和重定向时,它总是说重定向太多 简短解释。 public function handle($request, Closure $next) { if (Auth::check() && Auth::User()->email == 'Tester@gmail.com') { return $next

我想创建一个自定义中间件,仅当用户经过身份验证并且电子邮件是访问/admin页面的特定电子邮件时,该中间件才可用

虽然,当我指定自定义路由和重定向时,它总是说重定向太多

简短解释。

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

      if (Auth::check() && Auth::User()->email == 'Tester@gmail.com') {
        return $next($request);
      } else {
        return redirect()->route('home');
      }
  • 用户登录->重定向到/home。(工程)
  • 如果用户试图访问/admin,并且他们的电子邮件与中间件中指定的电子邮件不同,请重定向到/home
  • 如果是真的,请让他们输入/admin
  • 我的中间件名为“admin.verify”

    路由文件:

    Route::get('/admin', 'AdminController@index')->name('admin.index');
    
    <?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');
        }
    }
    
    管理员控制器:

    Route::get('/admin', 'AdminController@index')->name('admin.index');
    
    <?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');
        }
    }
    
    我的回家路线:

     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');
        }
    }
    

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

    问题在于,当您访问home route auth.verify方法时,会调用该方法,当该方法失败时,会将其重定向到home本身,从而创建一个循环,从而导致重定向过多错误


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

    显示
    主页
    路由的定义。您的中间件应位于路由文件中,而不是Controller@Option你为什么这么说?添加有效。向问题添加了更多信息如果用户未经身份验证,
    auth
    中间件将重定向到何处?这可能是重定向到相同的
    主页
    路线吗?我本来就有,但还是什么都没做。同样的错误。为什么让两个中间件都检查用户是否经过身份验证会出现问题?这只是为了测试,不用担心。。我把它拿走了!