π 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:
-
Fai login
-
Guarda la richiesta POST /api/auth/login
-
Controlla la Response Headers:
- Cerca
Set-Cookie: auth-token=... - Verifica che contenga
HttpOnly; Secure; SameSite=Lax
- Cerca
-
Guarda la richiesta successiva GET /api/auth/me
-
Controlla la Request Headers:
- Cerca
Cookie: auth-token=... - Se manca β il problema Γ¨ confermato
- Cerca
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.txtSe funziona con cURL ma non nel browser β problema browser-specific (SameSite/CORS)
π― Possibili Cause e Soluzioni
Causa #1: Dominio del Cookie Sbagliato
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.itE aggiorna il codice per usarlo.
Causa #2: Proxy Reverse che Rimuove Cookie
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
// ...
});Causa #5: Cookie Troppo Grande
Problema: Il JWT Γ¨ troppo grande.
Verifica:
# Decodifica il token dai log
echo "TOKEN_QUI" | base64 -dSe il cookie Γ¨ > 4KB, alcuni browser lo rifiutano.
π§ Fix Immediato da Provare
Ho giΓ implementato un workaround che imposta il cookie in due modi:
- Con
response.cookies.set()(standard Next.js) - 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 siaNONE - 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:
- Il login restituisce il token nel body (non nel cookie)
- Il frontend lo salva in localStorage
- Lo invia in ogni richiesta come Bearer token
Ma prima proviamo a risolvere i cookie!
π Next Steps
- Fai il deploy con i nuovi log
- Prova il login
- Copia qui i nuovi log con le info degli headers
- Identificheremo il problema esatto e applicheremo la fix corretta