php - 127.0.0.1 重定向您的次数过多。ERR_TOO_MANY_REDIRECTS Laravel 8
问题描述
我想管理路由中的授权,所以我创建了一个名为“角色”的中间件这是角色中间件处理函数:
public function handle(Request $request, Closure $next)
{
$role = Auth::user()->role_id;
$emp_id = Auth::user()->employee_id;
$clt_id = Auth::user()->client_id;
if ($role == 3745639763)
{
return $next($request);
} else if ($role == 1 && $emp_id == NULL)
{
return redirect('employee/con-reg');
} else if ($role == 2 && $clt_id == NULL)
{
return $next($request);
} else if ($role == 1 && $emp_id != NULL)
{
return redirect('client/con-reg');
} else if ($role == 2 && $clt_id != NULL)
{
return $next($request);
}
}
这是我给员工的路线:
Route::group([
'prefix'=> 'employee',
'middleware' => 'role',
'as' => 'employee.'
], function () {
Route::get('/con-reg', function () {
$works = Work::all();
return view('employee/con-register', compact('works'));
})->name('con-reg');
Route::post('/store', [EmployeeController::class, 'store'])->name('store');
Route::post('/profile', [EmployeeController::class, 'index'])->name('index');
});
这是主页路径,登录或注册后,您将被重定向到主页,这也是我放置中间件的地方,因为他可以在继续注册后访问主页,并为我们提供他选择的角色所需的更多信息:
Route::view('/home', 'home')->middleware('role');
这是Kernal.php文件:
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'emp' => \App\Http\Middleware\emp::class,
// 'clt' => \App\Http\Middleware\clt::class,
'role' => \App\Http\Middleware\role::class, //<------This is My Middleware
];
所以现在当我登录时,它并没有将我重定向到注册视图,而是上面的错误出现在我面前。
解决方案
这是因为路由employee/con-reg受此中间件保护。重定向后-您进入循环检查->重定向您需要为路由employee/con-reg禁用角色中间件
快速解决方案:
if ($request->path() === 'employee/con-reg'){
return $next($request);
}
正确的解决方案:
将此操作放在控制器中(不是在闭包中,这是不好的做法)并为其禁用中间件
推荐阅读
- java - 将 JNI 与 Gradle(和 lombok)一起使用
- vb.net - : '不能绑定到新的值成员。参数名称:value' vb.net 以及如何使用组合框中的值
- excel - 将列中的日期合并到 Excel 中的单个单元格中
- java - 如何使用 OpenCSV 解析多行记录?
- javascript - 如何在 React 中的兄弟组件之间传递数据?
- ios - 获取 UIColor 的深色样式
- azure-active-directory - 有没有办法使用 Graph API 获取 SharePoint Site Creator 电子邮件和网站状态
- tcp - 如何在 Microsoft Teams 中阻止聊天和通话
- r - 向数据框中添加一行,其中 n 列填充一个(相同)值 dplyr (add_row)
- flutter - snapshot.ConnectionState 总是在等待 FLUTTER