Rimuove il limite di tentativi dal login

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-25 16:57:59 +02:00
parent 6b00b2cb28
commit f534263c9c
2 changed files with 20 additions and 30 deletions
+11 -16
View File
@@ -2,27 +2,22 @@
import Admin from '../../layouts/Admin.astro';
import { getDb } from '../../lib/db';
import { login, getSessionUser, landingFor, SESSION_COOKIE } from '../../lib/auth';
import { rateLimit } from '../../lib/rate-limit';
export const prerender = false;
let error = '';
if (Astro.request.method === 'POST') {
if (!rateLimit(`login:${Astro.clientAddress}`, 5, 15 * 60 * 1000)) {
error = 'Troppi tentativi: riprova tra 15 minuti.';
} else {
const form = await Astro.request.formData();
const token = login(getDb(), String(form.get('username') ?? ''), String(form.get('password') ?? ''));
if (token) {
Astro.cookies.set(SESSION_COOKIE, token, {
httpOnly: true, sameSite: 'lax', path: '/',
secure: import.meta.env.PROD, maxAge: 7 * 24 * 3600,
});
// Ogni ruolo atterra sulla sua sezione: campus fuori dal pannello, gli
// altri sulla pagina admin che possono effettivamente aprire.
return Astro.redirect(landingFor(getSessionUser(getDb(), token)?.role ?? 'user'));
}
error = 'Credenziali non valide.';
const form = await Astro.request.formData();
const token = login(getDb(), String(form.get('username') ?? ''), String(form.get('password') ?? ''));
if (token) {
Astro.cookies.set(SESSION_COOKIE, token, {
httpOnly: true, sameSite: 'lax', path: '/',
secure: import.meta.env.PROD, maxAge: 7 * 24 * 3600,
});
// Ogni ruolo atterra sulla sua sezione: campus fuori dal pannello, gli
// altri sulla pagina admin che possono effettivamente aprire.
return Astro.redirect(landingFor(getSessionUser(getDb(), token)?.role ?? 'user'));
}
error = 'Credenziali non valide.';
}
---
<Admin title="Login">
+9 -14
View File
@@ -2,7 +2,6 @@
import Base from '../layouts/Base.astro';
import { getDb } from '../lib/db';
import { login, getSessionUser, SESSION_COOKIE } from '../lib/auth';
import { rateLimit } from '../lib/rate-limit';
import { safeNext } from '../lib/safe-next';
export const prerender = false;
@@ -14,20 +13,16 @@ if (existing && getSessionUser(getDb(), existing)) return Astro.redirect(dest);
let error = '';
if (Astro.request.method === 'POST') {
if (!rateLimit(`login:${Astro.clientAddress}`, 5, 15 * 60 * 1000)) {
error = 'Troppi tentativi: riprova tra 15 minuti.';
} else {
const form = await Astro.request.formData();
const token = login(getDb(), String(form.get('username') ?? ''), String(form.get('password') ?? ''));
if (token) {
Astro.cookies.set(SESSION_COOKIE, token, {
httpOnly: true, sameSite: 'lax', path: '/',
secure: import.meta.env.PROD, maxAge: 7 * 24 * 3600,
});
return Astro.redirect(safeNext(String(form.get('next') ?? '') || dest));
}
error = 'Credenziali non valide.';
const form = await Astro.request.formData();
const token = login(getDb(), String(form.get('username') ?? ''), String(form.get('password') ?? ''));
if (token) {
Astro.cookies.set(SESSION_COOKIE, token, {
httpOnly: true, sameSite: 'lax', path: '/',
secure: import.meta.env.PROD, maxAge: 7 * 24 * 3600,
});
return Astro.redirect(safeNext(String(form.get('next') ?? '') || dest));
}
error = 'Credenziali non valide.';
}
---
<Base title="Accedi" description="Area riservata InsanityLab">