在我的本地系统上,一切正常,但在我们的测试系统上部署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
全球中间件:
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
];
答案 0 :(得分:6)
我遇到了同样的问题。在调查时,我发现在我的代码中的某些时候,我使用了return
。
事实证明(正如你在handle方法的最后看到的那样)在执行handle方法之后你应该总是调用return $next($request);
。
答案 1 :(得分:3)
Illuminate \ Session \ Middleware \ StartSession类中的addCookieToResponse方法想要一个Response对象作为第一个参数。确保你在所有人中退回一个 路由。
这是一个可能的快速解决方案,根据您的情况进行更改。
在:
Route::get('hi', function() {
return 'hi';
});
后:
Route::get('hi', function() {
return response('hi');
});
答案 2 :(得分:3)
我的一个中间件(v5.8)也有类似的问题。 '调用成员函数SetCookie()为null','将CSRF令牌添加到响应cookie'
这是我的代码,在5.2中可以正常工作,但在Laravel 5.8中失败:
return view('pages.my_page')->with('data', $data);
更改为:
return response()->view('pages.my_page', ['data' => $data]);
干杯!
答案 3 :(得分:0)
In my case it was just cache. try running
php artisan config:cache
答案 4 :(得分:0)
对于所有来此错误的人来说,是cookie失败了。
所以最快的解决方法是使用其他浏览器。
在浏览器中转到设置,找到cookie并将其删除。
答案 5 :(得分:0)
我遇到了同样的问题,结果是我更改了生产服务器中 config/session.php
中的域
'domain' => env('SESSION_DOMAIN', 'mydomain.com'),
在我使用 127.0.0.1 的开发服务器上无法访问我的域
改成
'domain' => env('SESSION_DOMAIN', null),
现在工作正常