页面无法正确重定向 Laravel 5.6

4

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造成的。 我阅读了这些帖子link1link2link3,但没有解决我的问题。

1
/admin/setting' 使用 adminauth 中间件,但也是 adminauth 中间件将重定向到的地方。这会导致无限重定向。 - apokryfos
@apokryfos 谢谢,它解决了我的问题。 - Harrish Kumar
@apokryfos,请将此作为解决方案发布,以便发帖人可以将其标记为已回答。谢谢。 - Fjarlaegur
1个回答

4
问题在于您的admin/setting路由使用了adminauth中间件,但是如果adminauth中间件未通过,则会重定向到admin/setting
仅供参考:
重定向响应是具有300-399代码的响应,这些响应发送到浏览器,告诉浏览器下一步该做什么。 浏览器默认情况下会遵循重定向并创建到所述位置的新请求。
在您的情况下,浏览器创建了一个请求到admin/setting,中间件失败并告诉浏览器重定向到admin/setting,这将再次执行完全相同的操作。 Firefox等浏览器具有内置机制来检测此问题,并且不会向服务器发送请求,而是停止此循环并让用户知道存在问题。
要解决此问题,您需要将重定向到其他地方或从adminauth中间件中排除/admin/setting
解决方案取决于您的应用程序。

以下是更详细的解释,解释Firefox为什么正确地选择停止重定向:

根据HTTP/1.1协议第9.1.2节,GET请求是幂等的,即:

N个相同请求的副作用与单个请求相同

这是浏览器使用的假设,因为对X的请求导致重定向到同一个X,所以这是一次无限重定向并应该停止。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接