Php Laravel中间件重定向循环
我有一个小难题,我正在尝试建立一个登录系统,它使用laravel auth脚手架将普通用户与管理员用户区分开来 问题是它在中间件中处于无限重定向循环中 在我按下登录按钮后,它会不断重定向到一条路线,问题是,我如何才能用“laravel方法”或任何其他方法解决这个问题 这是我的控制器: 1.基本家庭控制器: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
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');
}
}
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']);
});