○起こっていること
ログイン後リダイレクトするのですが、ログインユーザーの情報をsessionに保持させています。
しかしながら、リダイレクト時には反映がなされず、リロードすると読み込める状態です。
ローカル環境での開発時にはこのようなことはなかったのですが、解決していきたいと思います。
○解決方法
結論として取った方法ですが、
-
redirect()
→view()
に変更 - flashメッセージではなく、sessionにデータを持たせることで解決しました。
(修正前のコード)
sample.php
return redirect()->route('top')->with('message', 'ログイン完了');
(修正後のコード)
sample.php
// sessionに保存
session([
'register.name' => 'laravel',
]);
// ①、②はどちらかそれぞれの状況によって
// ①$requestをsessionに保存するパターン
$request->session()->flash('message', '$requestからのsession');
// ②Sessionファザードを使用するパターン
Session::flash('message', 'Sessionファザード');
return view('sample');
(ブレード:sample.blade.php)
sample.html
<div @if(session('message')) flex @else hide @endif">
<div class="content">
<p class="text">{{ session('register.name') }} さん</p>
<p class="text">{{ session('message') }}</p>
<button class="btn close" id="close"></button>
</div>
</div>
○そもそも、原因は?
原因は、
Laravelのセッションの情報はレスポンスを返す直後に保存されるためです。
そのため、レスポンスを返していないリダイレクトでは、sessionが保存されていない。