页面重定向不正确 Laravel 5.6
The page isn’t redirecting properly Laravel 5.6
kernel.php
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'adminauth' => \App\Http\Middleware\AdminAuth::class,
];
web.php
Route::group(['middleware' => 'adminauth'], function() {
//route for admin dashboard
Route::get('/admin', [
'uses' => 'AdminController@dashboard',
'as' => 'dashboard'
]);
//route for admin setting
Route::get('/admin/setting', [
'uses' => 'AdminController@setting'
]);
});
AdminAuth.php
public function handle($request, Closure $next)
{
return redirect('/admin/setting');
//return $next($request);
}
AdminController.php
public function setting() {
$admin = $this->admin;
$notification = $this->notification;
return view('admin/setting')->with(compact(
'admin',
'notification'
));
}
我遇到了这个问题,即 页面没有正确重定向
Firefox 检测到服务器正在以一种永远不会完成的方式重定向对该地址的请求。
此问题有时可能是由于禁用或拒绝接受 cookie 引起的。
我阅读了这些帖子 link1, link2, 但没有解决我的问题。
问题是您的 admin/setting
路由使用了 adminauth
中间件,但是如果它没有通过,您的 adminauth
中间件将重定向到 admin/setting
。
仅供参考:
重定向响应是代码在 300-399 之间的响应,这些响应被发送到浏览器,告诉浏览器下一步要做什么。默认情况下,浏览器将遵循重定向并创建到所述位置的新请求。
在您的情况下,浏览器创建了对 admin/setting
的请求,中间件失败并告诉浏览器重定向到 admin/setting
,这将再次执行完全相同的操作。像 Firefox 这样的浏览器有一个内置的机制来检测这个,而不是用请求淹没你的服务器只会停止这个循环并让用户知道有问题。
要解决这个问题,您需要重定向到其他地方或从 adminauth
中间件中排除 /admin/setting
。
解决方案将取决于您的应用程序。
关于为什么 Firefox 正确选择停止重定向的更多细节:
根据 section 9.1.2 of the HTTP/1.1 protocol GET 请求是幂等的,即
the side-effects of N > 0 identical requests is the same as for a single request
这是浏览器用来声明的假设,因为对 X 的请求会导致重定向到同一个 X,那么这是一个无限重定向,应该停止。
kernel.php
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'adminauth' => \App\Http\Middleware\AdminAuth::class,
];
web.php
Route::group(['middleware' => 'adminauth'], function() {
//route for admin dashboard
Route::get('/admin', [
'uses' => 'AdminController@dashboard',
'as' => 'dashboard'
]);
//route for admin setting
Route::get('/admin/setting', [
'uses' => 'AdminController@setting'
]);
});
AdminAuth.php
public function handle($request, Closure $next)
{
return redirect('/admin/setting');
//return $next($request);
}
AdminController.php
public function setting() {
$admin = $this->admin;
$notification = $this->notification;
return view('admin/setting')->with(compact(
'admin',
'notification'
));
}
我遇到了这个问题,即 页面没有正确重定向 Firefox 检测到服务器正在以一种永远不会完成的方式重定向对该地址的请求。 此问题有时可能是由于禁用或拒绝接受 cookie 引起的。
我阅读了这些帖子 link1, link2,
问题是您的 admin/setting
路由使用了 adminauth
中间件,但是如果它没有通过,您的 adminauth
中间件将重定向到 admin/setting
。
仅供参考:
重定向响应是代码在 300-399 之间的响应,这些响应被发送到浏览器,告诉浏览器下一步要做什么。默认情况下,浏览器将遵循重定向并创建到所述位置的新请求。
在您的情况下,浏览器创建了对 admin/setting
的请求,中间件失败并告诉浏览器重定向到 admin/setting
,这将再次执行完全相同的操作。像 Firefox 这样的浏览器有一个内置的机制来检测这个,而不是用请求淹没你的服务器只会停止这个循环并让用户知道有问题。
要解决这个问题,您需要重定向到其他地方或从 adminauth
中间件中排除 /admin/setting
。
解决方案将取决于您的应用程序。
关于为什么 Firefox 正确选择停止重定向的更多细节:
根据 section 9.1.2 of the HTTP/1.1 protocol GET 请求是幂等的,即
the side-effects of N > 0 identical requests is the same as for a single request
这是浏览器用来声明的假设,因为对 X 的请求会导致重定向到同一个 X,那么这是一个无限重定向,应该停止。