Cierra el flujo de login: logout, selector de cuenta y /account con guardas
- Route handlers: /api/auth/logout (destroy sesión), /api/auth/select-account (fija la cuenta de juego elegida, valida que pertenece a la bnet en sesión). - app/[locale]/select-account: página SSR (guarda: sin bnetId -> login) + lista de cuentas de juego (SelectAccountForm cliente) -> /account. - app/[locale]/account: página protegida (sin bnetId -> login; sin username -> select-account) con datos de sesión + LogoutButton. - Textos en messages (Account, SelectAccount). Verificado: guardas locale-aware (ES /account -> /login, EN /en/account -> /en/login, 307), logout OK, select-account sin sesión 401. Redirect i18n con next-intl. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
import { getSession } from '@/lib/session'
|
||||
|
||||
export async function POST() {
|
||||
const session = await getSession()
|
||||
session.destroy()
|
||||
return Response.json({ success: true })
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
import { getGameAccounts } from '@/lib/auth'
|
||||
import { getSession } from '@/lib/session'
|
||||
import { setGameAccountSession } from '@/lib/account-session'
|
||||
|
||||
export async function POST(request: Request) {
|
||||
const session = await getSession()
|
||||
if (!session.bnetId) {
|
||||
return Response.json({ success: false, error: 'notAuthenticated' }, { status: 401 })
|
||||
}
|
||||
let accountId: number
|
||||
try {
|
||||
const body = await request.json()
|
||||
accountId = Number(body.accountId)
|
||||
} catch {
|
||||
return Response.json({ success: false, error: 'invalidRequest' }, { status: 400 })
|
||||
}
|
||||
|
||||
const games = await getGameAccounts(session.bnetId)
|
||||
const chosen = games.find((g) => g.id === accountId)
|
||||
if (!chosen) {
|
||||
return Response.json({ success: false, error: 'invalidAccount' })
|
||||
}
|
||||
setGameAccountSession(session, chosen)
|
||||
await session.save()
|
||||
return Response.json({ success: true })
|
||||
}
|
||||
Reference in New Issue
Block a user