fix: corriger bug multi-sessions (upsertUser wrong ID + schema repair + logs refresh)

- auth.go: upsertUser utilise toujours SELECT explicite au lieu de LastInsertId()
  qui retournait un rowid obsolète pour ON CONFLICT DO UPDATE sur ligne existante
- auth.go: vérifier l'erreur de l'INSERT refresh_tokens (était silencieusement ignorée)
- auth.go: logs détaillés dans Refresh handler pour diagnostiquer les 401
- db.go: repairSchema() ajoute les colonnes manquantes (ip, last_used_at) dans les
  bases où migration 002 était partiellement appliquée (ancien bug multi-statements)
- app.js: tryRefresh et fetchMe affichent le vrai message d'erreur du backend

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
enzo 2026-03-22 01:32:01 +01:00
parent dc0c67b89c
commit 95757124de
3 changed files with 88 additions and 19 deletions

View file

@ -177,9 +177,10 @@ document.addEventListener('alpine:init', () => {
await this.tryRefresh()
} else {
// Erreur inattendue (404, 500…) — signaler + tenter quand même
console.error(`[auth/me] HTTP ${res.status}`)
const body = await res.json().catch(() => ({}))
console.error(`[auth/me] HTTP ${res.status}`, body.error || '')
Alpine.store('toasts').error(
`Erreur serveur (${res.status}) sur /api/auth/me — le backend est-il démarré ?`
`Erreur ${res.status} sur /api/auth/me : ${body.error || 'voir console'}`
)
await this.tryRefresh()
}
@ -193,15 +194,14 @@ document.addEventListener('alpine:init', () => {
localStorage.setItem('pxp_token', data.access_token)
await this.fetchMe()
} else {
// Session expirée ou révoquée → notifier via sessionStorage (visible sur la page login)
// Lire le vrai message d'erreur du backend pour le diagnostic
const body = await res.json().catch(() => ({}))
const serverMsg = body.error || `HTTP ${res.status}`
const page = window.location.pathname.replace(/^\/|\.html$/g, '')
if (page !== 'login' && page !== 'install' && page !== 'index' && page !== '') {
sessionStorage.setItem('pxp_auth_notice',
res.status === 401
? 'Session expirée ou révoquée — veuillez vous reconnecter'
: `Erreur ${res.status} lors du renouvellement de session`
)
sessionStorage.setItem('pxp_auth_notice', `Refresh échoué : ${serverMsg}`)
}
console.error('[auth/tryRefresh]', res.status, serverMsg)
this.clear()
}
},