LaravelでSessionに何かを入れておく処理を書いて、一度アクセス(セッションに保存)しておき、、
class LoginUserController extends Controller
{
public function index(Request $request)
{
$token = 'hoge';
// セッションIDの発行
session()->regenerate();
// セッションへデータを保存する
session(['token' => $token]);
$token = session('accessToken'); // セッションからデータを取り出す
Log::debug($token); // ちゃんと表示される
}
}
別のControllerのコンストラクタで(以後のアクセスの際に)Sessionから値を取り出そうとすると、あるはずの値がない。
class HogeController extends Controller
{
public function __construct()
{
$token = session('accessToken');
Log::debug($token);
}
public function index()
{
//
}
}
logは空文字。
対処法
Kernel.phpの以下を変更すると治る。
app/Http/Kernel.php
class Kernel extends HttpKernel
{
protected $middleware = [
\App\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\TrustProxies::class,
\Illuminate\Session\Middleware\StartSession::class, // ここを追加
];
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
// \Illuminate\Session\Middleware\StartSession::class, // コメントアウト
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
}