Laravel Session中间件坏了

Deh*_*tth 5 middleware laravel laravel-5 laravel-5.1 laravel-5.2

在我的本地系统上一切正常,但在我们的测试系统上部署Laravel 5.2后,它看起来像是会话中间件坏了.有人可以帮忙吗?

Argument 1 passed to Illuminate\Session\Middleware\    
StartSession::addCookieToResponse() must be an instance of  
Symfony\Component\HttpFoundation\Response, boolean given, called in   
... /httpdocs/service/vendor/laravel/framework/src/Illuminate/Session 
/Middleware/StartSession.php on line 72 and defined
Run Code Online (Sandbox Code Playgroud)

全球中间件:

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    \App\Http\Middleware\CORSMiddleware::class,
    \LucaDegasperi\OAuth2Server\Middleware\OAuthExceptionHandlerMiddleware::class
];
Run Code Online (Sandbox Code Playgroud)

Leo*_*eal 7

这个问题已经有一年了,但是在遇到同样的问题后我发现了这个问题.

在我的代码中的某些时候我使用过: return.

事实证明(正如你在handle方法的最后看到的那样)在执行handle方法后你应该总是调用 return $next($request);


小智 6

我在我的一个中间件 (v5.8) 中遇到了类似的问题。'在 null 上调用成员函数 SetCookie()', '将 CSRF 令牌添加到响应 cookie'

这是我的代码,在 5.2 中运行良好,但在 Laravel 5.8 中失败:

return view('pages.my_page')->with('data', $data);
Run Code Online (Sandbox Code Playgroud)

变成:

return response()->view('pages.my_page', ['data' => $data]);
Run Code Online (Sandbox Code Playgroud)

干杯!


小智 4

Illuminate\Session\Middleware\StartSession 类中的 addCookieToResponse 方法需要一个 Response 对象作为第一个参数。确保您在所有路线中都返回了一条。

这是一个可能的快速修复方法,请更改它以适合您的情况。

前:

Route::get('hi', function() {
    return 'hi';
});
Run Code Online (Sandbox Code Playgroud)

后:

Route::get('hi', function() {
    return response('hi');
});
Run Code Online (Sandbox Code Playgroud)