Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.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 Laravel中间件重定向循环_Php_Laravel_Loops_Redirect_Laravel 5 - Fatal编程技术网

Php Laravel中间件重定向循环

Php Laravel中间件重定向循环,php,laravel,loops,redirect,laravel-5,Php,Laravel,Loops,Redirect,Laravel 5,我有一个小难题,我正在尝试建立一个登录系统,它使用laravel auth脚手架将普通用户与管理员用户区分开来 问题是它在中间件中处于无限重定向循环中 在我按下登录按钮后,它会不断重定向到一条路线,问题是,我如何才能用“laravel方法”或任何其他方法解决这个问题 这是我的控制器: 1.基本家庭控制器: namespace App\Http\Controllers; use Illuminate\Http\Request; class HomeController extends Cont

我有一个小难题,我正在尝试建立一个登录系统,它使用laravel auth脚手架将普通用户与管理员用户区分开来

问题是它在中间件中处于无限重定向循环中

在我按下登录按钮后,它会不断重定向到一条路线,问题是,我如何才能用“laravel方法”或任何其他方法解决这个问题

这是我的控制器: 1.基本家庭控制器:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HomeController extends Controller
{
   /**
   * Show the application dashboard.
   *
   * @return \Illuminate\Http\Response
   */
  public function index()
  {
    return view('home');
  }
}
 namespace App\Http\Controllers\Admin;

 use Illuminate\Http\Request;
 use App\Http\Controllers\Controller;

 class Start extends Controller
 {

  public function index(){

    return view('admin/index');
  }

}
  • 主管理控制器-入口控制器:

    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    
    class HomeController extends Controller
    {
       /**
       * Show the application dashboard.
       *
       * @return \Illuminate\Http\Response
       */
      public function index()
      {
        return view('home');
      }
    }
    
     namespace App\Http\Controllers\Admin;
    
     use Illuminate\Http\Request;
     use App\Http\Controllers\Controller;
    
     class Start extends Controller
     {
    
      public function index(){
    
        return view('admin/index');
      }
    
    }
    
  • 登录控制器(auth scaffolding中的默认控制器-由我修改,我删除了构造函数):

  • 中间件(如果重定向验证,则重定向):

  • 路由文件(web路由)


  • guest/RedirectIfAuthenticated将任何请求重定向到经过身份验证的用户对应的主路由。问题是管理主路由也在这个中间件后面,这就是为什么它一直重定向到同一个页面


    您需要从路由组中删除guest中间件-它应该只应用于未经身份验证的用户可以使用的路由。

    当然这是一个无限循环,因为您将guest和auth中间件应用于路由,因此,经过身份验证的用户也将被重定向,这是一个无限循环

    将RedirectIfAuthenticated.php保持为原始代码,并根据用户类型在主控制器内重定向经过身份验证的用户:

    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    
    class HomeController extends Controller
    {
        /**
        * Show the application dashboard.
        *
        * @return \Illuminate\Http\Response
        */
        public function index(Request $request)
        {
            // if type 1 is admin, why did you redirect type 2 to web-admin?!
            if($request->user()->type == 2) { //if user type is 1 then it's an admin.
                return redirect()->route('web-admin');
            }
            return view('home');
        }
    }
    
    您可以在您的管理控制器中为普通用户执行相同的重定向,以便在他们尝试访问管理页面时将其重定向回

    另外修改web.php路由,如下所示:

    Route::get('/', function () {
        if(auth()->user()->type == 2) { //if user type is 1 then it's an admin.
            return redirect()->route('web-admin');
        } else {
            return redirect()->route('home');
        }
    })->middleware('auth');
    
    Auth::routes();
    Route::middleware('auth')->group(function() {
        Route::get('home',['as'=>'home', 'uses'=>'HomeController@index']);
        Route::get('web-admin',['as'=>'web-admin', 'uses'=>'Admin\Start@index']);
    });
    

    这是一个关于用户类型的输入错误,类型2是最重要的,这样你就会有多个重定向。首先从中间件到
    home
    ,然后从HomeController.Nope到
    web admin
    。中间件只是将经过身份验证的用户重定向到“/”,以防他们试图访问登录页面Yes。从登录路由中删除来宾中间件将停止重定向。谢谢
    Route::get('/', function () {
        if(auth()->user()->type == 2) { //if user type is 1 then it's an admin.
            return redirect()->route('web-admin');
        } else {
            return redirect()->route('home');
        }
    })->middleware('auth');
    
    Auth::routes();
    Route::middleware('auth')->group(function() {
        Route::get('home',['as'=>'home', 'uses'=>'HomeController@index']);
        Route::get('web-admin',['as'=>'web-admin', 'uses'=>'Admin\Start@index']);
    });