Skip to Content
TecnicaAutenticazioneπŸ” DEBUG: Cookie Non Inviato dal Browser

πŸ” DEBUG: Cookie Non Inviato dal Browser

🚨 Problema Identificato

I log mostrano:

βœ… [LOGIN] Cookie set successfully ❌ [AUTH/ME] No cookie received - allCookies: ""

Il server imposta il cookie, ma il browser NON lo invia nella richiesta successiva.


πŸ§ͺ Test Immediati da Fare

1. Verifica nel Browser DevTools

Dopo il login, apri DevTools > Application > Cookies:

Controlla:

  • βœ… C’è un cookie auth-token?
  • βœ… Il dominio Γ¨ foodcostapp.meating3srl.it?
  • βœ… Il path Γ¨ /?
  • βœ… Secure Γ¨ βœ“?
  • βœ… HttpOnly Γ¨ βœ“?
  • βœ… SameSite Γ¨ Lax?

Se NON vedi il cookie: β†’ Il browser sta rifiutando il cookie (problema di dominio/HTTPS)

Se vedi il cookie ma non viene inviato: β†’ Problema di SameSite/CORS/domain mismatch

2. Verifica Headers HTTP

DevTools > Network:

  1. Fai login

  2. Guarda la richiesta POST /api/auth/login

  3. Controlla la Response Headers:

    • Cerca Set-Cookie: auth-token=...
    • Verifica che contenga HttpOnly; Secure; SameSite=Lax
  4. Guarda la richiesta successiva GET /api/auth/me

  5. Controlla la Request Headers:

    • Cerca Cookie: auth-token=...
    • Se manca β†’ il problema Γ¨ confermato

3. Test con cURL

Dal server stesso:

# 1. Fai login e salva il cookie curl -X POST https://foodcostapp.meating3srl.it/api/auth/login \ -H "Content-Type: application/json" \ -d '{"email":"enniocecco@gmail.com","password":"YOUR_PASSWORD"}' \ -v -c /tmp/cookies.txt # 2. Controlla che il cookie sia stato salvato cat /tmp/cookies.txt # 3. Usa il cookie per chiamare /me curl -X GET https://foodcostapp.meating3srl.it/api/auth/me \ -v -b /tmp/cookies.txt

Se funziona con cURL ma non nel browser β†’ problema browser-specific (SameSite/CORS)


🎯 Possibili Cause e Soluzioni

Problema: Il cookie viene impostato per un dominio diverso da quello della richiesta.

Verifica nei log: Guarda i nuovi log aggiunti:

[LOGIN] Request info: {"host":"...", "origin":"..."} [AUTH/ME] Request info: {"host":"...", "origin":"..."}

Se i domini sono diversi β†’ Questo Γ¨ il problema!

Fix: Aggiungi al .env:

COOKIE_DOMAIN=foodcostapp.meating3srl.it

E aggiorna il codice per usarlo.

Problema: Nginx/Apache non passa correttamente i cookie.

Verifica configurazione Nginx:

# Nel tuo nginx.conf location / { proxy_pass http://localhost:4000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # IMPORTANTE per i cookie: proxy_pass_header Set-Cookie; proxy_cookie_domain localhost foodcostapp.meating3srl.it; proxy_cookie_path / /; }

Causa #3: Mixed Content (HTTP/HTTPS)

Problema: Qualche richiesta passa per HTTP invece di HTTPS.

Verifica nei log:

[LOGIN] Request info: {"protocol":"http"} ← MALE! Dovrebbe essere: {"protocol":"https"}

Fix Nginx:

# Force HTTPS server { listen 80; server_name foodcostapp.meating3srl.it; return 301 https://$server_name$request_uri; }

Causa #4: SameSite + Cross-Origin

Problema: Se il browser considera le richieste cross-origin, SameSite=Lax potrebbe bloccare.

Verifica:

  • Origin del login: https://foodcostapp.meating3srl.it
  • Origin del /me: https://foodcostapp.meating3srl.it

Se sono diversi β†’ Problema!

Fix temporaneo: Cambia sameSite: "none" (richiede secure: true):

response.cookies.set("auth-token", token, { httpOnly: true, secure: true, sameSite: "none", // SOLO PER TEST // ... });

Problema: Il JWT Γ¨ troppo grande.

Verifica:

# Decodifica il token dai log echo "TOKEN_QUI" | base64 -d

Se il cookie Γ¨ > 4KB, alcuni browser lo rifiutano.


πŸ”§ Fix Immediato da Provare

Ho giΓ  implementato un workaround che imposta il cookie in due modi:

  1. Con response.cookies.set() (standard Next.js)
  2. Con response.headers.append('Set-Cookie') (header diretto)

Questo risolve problemi con alcuni proxy.

Fai il deploy e riprova.


πŸ“‹ Checklist Debug

Dopo il deploy:

  • Guarda i nuovi log con le info sugli headers
  • Verifica che il log mostri [LOGIN] Set-Cookie header: ...
  • Controlla che [AUTH/ME] cookieHeader: non sia NONE
  • Verifica nei DevTools che il cookie sia presente
  • Se il cookie Γ¨ presente ma non inviato, problema di SameSite
  • Se il cookie non Γ¨ presente, problema di Set-Cookie

πŸ’‘ Quick Fix: Disabilita Secure per Test

SOLO PER DEBUG, prova temporaneamente:

// In .env.local o .env NODE_ENV = development;

Questo disabilita il flag Secure, permettendo HTTP.

Se funziona β†’ Il problema Γ¨ con HTTPS/SSL Se non funziona β†’ Il problema Γ¨ altrove (dominio/SameSite)


πŸ†˜ Soluzione Estrema: Session Storage

Se i cookie continuano a non funzionare, alternativa:

  1. Il login restituisce il token nel body (non nel cookie)
  2. Il frontend lo salva in localStorage
  3. Lo invia in ogni richiesta come Bearer token

Ma prima proviamo a risolvere i cookie!


πŸ“ž Next Steps

  1. Fai il deploy con i nuovi log
  2. Prova il login
  3. Copia qui i nuovi log con le info degli headers
  4. Identificheremo il problema esatto e applicheremo la fix corretta
Last updated on