Skip to content

Permitir entrar, renovar e encerrar sessão #516

Description

@edvaldoszy

Visão geral

POST /login devolve { token, usuario } (JWT 2 dias). Clientes web e móveis precisam de access curto + refresh, regras no JSON, e logout que apaga a sessão. O login antigo permanece até a #524.

_spec/auth-and-authorization.md §6–§7.

Fora de escopo

  • Autorizar rotas de negócio (authorize)
  • Remover POST /login
  • App móvel (só o contrato HTTP)
  • Redefinição de senha (token_troca_senha)

Critérios de aceite

  • POST /auth/login com e-mail/senha válidos devolve o payload abaixo + Set-Cookie de refresh
  • POST /auth/refresh aceita cookie ou body; rotaciona hash na mesma sessão; refresh antigo não vale
  • POST /auth/logout apaga a sessão atual; { "all": true } com access válido apaga todas
  • GET /auth/me com Bearer access devolve { user, rules }
  • Credencial inválida / usuário inativo: erro genérico; rate limit igual ao login atual
  • Cookie: HttpOnly, Secure, SameSite=None, path /auth
  • CORS com credentials e origem explícita (painel ≠ API)
  • Refresh/logout por cookie exigem header custom (ex. X-Requested-With)
  • POST /login inalterado

Detalhes técnicos

Access JWT (~15 min): sub = usuarios.id, sid = id da sessão, typ = access, role = tipo_usuario_id (não autorizar por role), iat/exp. Não colocar rules no JWT.

Refresh: opaco, 30 dias sliding. Sempre no JSON e no cookie. Se cookie e body vierem juntos, o body ganha.

Login request: { "email", "senha" } — sem client.

Login response 200:

{
  "access_token": "<jwt>",
  "refresh_token": "<opaque>",
  "token_type": "Bearer",
  "expires_in": 900,
  "user": {
    "id": 1,
    "nome": "",
    "email": "",
    "tipo_usuario_id": 1
  },
  "rules": [
    { "action": "read", "resource": "Tombo" }
  ]
}

user (não usuario). rules no topo (não abilities, sem version).

Refresh 401 se hash some ou expires_at passou (apagar linha expirada se existir).

Access expirado nas rotas de negócio (issue #517): código distinto de 401 “inválido” para o cliente renovar uma vez.

Manter POST /login em src/routes/usuarios.js.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    • Status
      to do

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions