StreakFit web: fix 419 sur les séances — pose le cookie CSRF avant toute requête mutante
Build & Deploy / build (push) Successful in 23s

Cause: après login OIDC/pocket-id (ou XSRF cookie absent), le SPA n'avait jamais
appelé /sanctum/csrf-cookie -> POST /api/sessions (démarrer une séance) = 419.
Fix: useApi.api récupère automatiquement le cookie XSRF si absent avant tout
POST/PUT/PATCH/DELETE. Corrige démarrage de séance, log de séries, complete, etc.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-21 13:57:10 +02:00
co-authored by Claude Opus 4.8
parent 742703a36f
commit 8a0de78e78
+11 -2
View File
@@ -12,12 +12,21 @@ function readCookie(name: string): string | null {
export function useApi() { export function useApi() {
const base = useRuntimeConfig().public.apiBase as string const base = useRuntimeConfig().public.apiBase as string
const SAFE_METHODS = new Set(['GET', 'HEAD', 'OPTIONS'])
const api = $fetch.create({ const api = $fetch.create({
baseURL: base, baseURL: base,
credentials: 'include', credentials: 'include',
headers: { Accept: 'application/json' }, headers: { Accept: 'application/json' },
onRequest({ options }) { async onRequest({ options }) {
const xsrf = readCookie('XSRF-TOKEN') const method = String(options.method || 'GET').toUpperCase()
let xsrf = readCookie('XSRF-TOKEN')
// Requête mutante sans cookie XSRF (ex : session ouverte via OIDC/pocket-id qui n'est jamais
// passée par /sanctum/csrf-cookie) → on pose le cookie avant, sinon Sanctum renvoie 419.
if (!xsrf && !SAFE_METHODS.has(method)) {
await ensureCsrf()
xsrf = readCookie('XSRF-TOKEN')
}
const headers = new Headers(options.headers as HeadersInit) const headers = new Headers(options.headers as HeadersInit)
if (xsrf) headers.set('X-XSRF-TOKEN', xsrf) if (xsrf) headers.set('X-XSRF-TOKEN', xsrf)
options.headers = headers options.headers = headers