mirror of
https://github.com/InvoiceShelf/InvoiceShelf.git
synced 2026-04-07 05:31:24 +00:00
Fix logout/re-login CSRF mismatch and stale token issues
Cherry-picked from v3.0 branch. Three fixes: 1. Refresh CSRF cookie after logout (auth.js) 2. Clear auth.token and selectedCompany from localStorage on logout (auth.js) 3. Invalidate session and regenerate CSRF token on server-side logout (web.php) Without these, logging out and back in as a different user would fail with CSRF token mismatch and 401 Unauthenticated errors because the browser held stale session cookies and localStorage tokens.
This commit is contained in:
15
resources/scripts/admin/stores/auth.js
vendored
15
resources/scripts/admin/stores/auth.js
vendored
@@ -46,20 +46,29 @@ export const useAuthStore = (useWindow = false) => {
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
http
|
http
|
||||||
.post('/auth/logout')
|
.post('/auth/logout')
|
||||||
.then((response) => {
|
.then(async (response) => {
|
||||||
const notificationStore = useNotificationStore()
|
const notificationStore = useNotificationStore()
|
||||||
notificationStore.showNotification({
|
notificationStore.showNotification({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
message: 'Logged out successfully.',
|
message: 'Logged out successfully.',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Clear stored auth data so next login doesn't send stale tokens
|
||||||
|
window.Ls.remove('auth.token')
|
||||||
|
window.Ls.remove('selectedCompany')
|
||||||
|
|
||||||
|
// Refresh CSRF token so next login works cleanly
|
||||||
|
await http.get('/sanctum/csrf-cookie').catch(() => {})
|
||||||
|
|
||||||
window.router.push('/login')
|
window.router.push('/login')
|
||||||
// resetStore.clearPinia()
|
|
||||||
resolve(response)
|
resolve(response)
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
handleError(err)
|
handleError(err)
|
||||||
window.router.push('/')
|
window.Ls.remove('auth.token')
|
||||||
|
window.Ls.remove('selectedCompany')
|
||||||
|
http.get('/sanctum/csrf-cookie').catch(() => {})
|
||||||
|
window.router.push('/login')
|
||||||
reject(err)
|
reject(err)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -34,6 +34,9 @@ Route::post('login', [LoginController::class, 'login']);
|
|||||||
|
|
||||||
Route::post('auth/logout', function () {
|
Route::post('auth/logout', function () {
|
||||||
Auth::guard('web')->logout();
|
Auth::guard('web')->logout();
|
||||||
|
|
||||||
|
request()->session()->invalidate();
|
||||||
|
request()->session()->regenerateToken();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Customer auth
|
// Customer auth
|
||||||
|
|||||||
Reference in New Issue
Block a user