feat(auth): «Manter sessão iniciada» (auditoria: item Médio)
config/functions_remember.php reimplementa o desenho selector/validator do platform-tools (functions_remember.php) localmente, porque esta app tem autenticação própria e não passa por functions_auth.php partilhado: selector em claro e UNIQUE indexa a linha, só o SHA-256 do validator fica na BD, hash_equals() na comparação, rotação a cada uso, e um validator que não bate certo revoga TODOS os tokens da conta (sinal de cookie em circulação). - Checkbox no login; remember_issue() só quando marcada. - require_login() tenta remember_resume() antes de mandar para o login. - logout.php apaga só o token deste browser (não a conta toda). - auth_set_password() revoga todos os tokens da conta — uma password nova não pode deixar um cookie antigo continuar a entrar. Migração: database/migration_20260925_remember_me.sql (remember_tokens). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ee30e6f116
commit
300655b92a
7 files changed
+188
No files matched your search
@@ -6,6 +6,11 @@
|
||||
// of the app.
|
||||
|
||||
function require_login(): array {
|
||||
if (empty($_SESSION['user_id']) && ($GLOBALS['pdo'] ?? null) instanceof PDO) {
|
||||
// «Manter sessão iniciada»: antes de mandar para o login, tenta repor
|
||||
// a sessão a partir do cookie (config/functions_remember.php).
|
||||
remember_resume($GLOBALS['pdo']);
|
||||
}
|
||||
if (empty($_SESSION['user_id'])) {
|
||||
$return = $_SERVER['REQUEST_URI'] ?? '';
|
||||
$qs = $return ? ('?return_to=' . urlencode($return)) : '';
|
||||
|
||||
Reference in new issue
Block a user