Open ChrisThompsonTLDR opened 7 years ago
Something like this might be the solution.
app/Http/Controllers/Auth/LoginController.php
public function logout(Request $request)
{
$cart = collect(session()->get('cart'));
$destination = \Auth::logout();
if (!config('cart.destroy_on_logout')) {
$cart->each(function($rows, $identifier) {
session()->put('cart.' . $identifier, $rows);
});
}
return redirect()->to($destination);
}
Same problem in Laravel 5.4, for now i comented this lines. $request->session()->flush(); $request->session()->regenerate(); I've tried something like ChrisThompsonTLDR says but is not working for now. If i find more elegant soluton i will write here.
Any update on this? I am having the same issue...
This is a problem for me too starting in 5.3. I rely on a session variable that get's set when the logout event is fired but the session gets flushed and that session variable is no longer available to me at response time.
@raylight75 I'm on 5.4 and solution @ChrisThompsonTLDR did give is working fine. the complete answer is:
app/Http/Controllers/Auth/LoginController.php
public function logout(Request $request): JsonResponse
{
try {
$cart = collect($request->session()->get('cart'));
$this->guard()->logout();
$request->session()->flush();
$request->session()->regenerate();
if (!config('cart.destroy_on_logout')) {
$cart->each(function($rows, $identifier) use ($request) {
$request->session()->put('cart.' . $identifier, $rows);
});
}
return response()->json([
'status' => true,
'redirect' => $this->redirectTo()
], 200);
} catch (Exception $e) {
return response()->json([
'status' => false, 'code' => $e->getCode()
], 422);
}
}
notice that my project is multiple admin so I use guard() for logout and the function is overridden.
Laravel 5.3 does a complete session flush when a user logs out.
The change to flush the entire session at logout was added in this commit.
I think it makes the
destroy_on_logout
config param irrelevant because Laravel kills the entire session.