Skip to content

Persistir sessões de usuário #515

Description

@edvaldoszy

Visão geral

Não existe sessão no servidor: o JWT vale até expirar. Esta issue cria usuarios_sessoes e a persistência (criar, atualizar hash na rotação, apagar). Login HTTP fica na #516.

Ver _spec/auth-and-authorization.md §6.3–§6.4.

Fora de escopo

  • Endpoints /auth/*
  • Cookie e CORS
  • Tela de dispositivos
  • Colunas de reuse-detection (revoked_at, replaced_by_id, refresh_family_id)

Critérios de aceite

  • Migration cria usuarios_sessoes com as colunas abaixo
  • Encerrar sessão = DELETE da linha; encerrar todas / desativar usuário apaga todas as linhas dele
  • Rotação atualiza a mesma linha (mesmo id / sid)
  • Login legado não quebra

Detalhes técnicos

Nome: usuarios_sessoes (padrão usuarios, tipos_usuarios). Não usar auth_sessoes.

Coluna Notas
id UUID, também o claim sid do access JWT
usuario_id FK usuarios.id
refresh_token_hash SHA-256 ou HMAC do refresh atual
created_at, last_used_at
expires_at sliding 30 dias na renovação

Não criar: client, device_label, revoked_at, replaced_by_id, refresh_family_id.

Persistência alinhada ao que o repo já usa para migration (Knex CLI em src/database/cli.ts / modelo Sequelize se a issue de sessão ficar no legado). Refresh opaco via crypto; guardar só o hash.

usuarios.ativo = false deve apagar as sessões no mesmo fluxo (transação ou equivalente) — o gancho pode completar na #516 se o desativar usuário já existir no controller.

Rotação (mesma linha):

await knex('usuarios_sessoes').where({ id: session.id }).update({
  refresh_token_hash: hash(newRefresh),
  last_used_at: now,
  expires_at: addDays(now, 30),
})

Logout:

await knex('usuarios_sessoes').where({ id: session.id }).delete()
// all:
await knex('usuarios_sessoes').where({ usuario_id: user.id }).delete()

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

Projects

  • Status
    done

Relationships

None yet

Development

No branches or pull requests

Issue actions