Usuário padrão
Todo projeto novo já nasce pronto para autenticação. A menos que você passe --no-user, o gize new gera um recurso users completo — model, migration e rotas protegidas — já registrado em src/app/mod.rs e gize.toml.
Nasce junto com o app
O gize new shop gera a mesma fatia em camadas que o gize make crud produz (model, dto, repository, service, handler, routes, error, tests), mais a migration da tabela users. Depois do gize migrate você tem um recurso de identidade funcional e pronto para auth sem escrever uma linha de código.
As senhas são hasheadas com Argon2id antes de serem armazenadas e nunca são serializadas de volta nas respostas da API. Os endpoints register e login emitem um JWT stateless (HS256) assinado com GIZE_JWT_SECRET, e uma claim is_admin viaja no token para que as rotas de admin não precisem de consulta extra ao banco.
É um recurso, não um framework escondido: cada arquivo é Rust comum e seu, que você pode ler, versionar e estender. Passe gize new shop --no-user para pular tudo isso.
O model User
A tabela users é criada com uma restrição UNIQUE em email e is_admin com padrão false. O model gerado mapeia para ela um-para-um:
idUuidChave primária, gerada pelo banco de dados.nameStringO nome de exibição do usuário.emailStringIdentificador de login; UNIQUE no nível do banco.passwordStringHash Argon2id. Marcado com #[serde(skip_serializing)], então é lido do banco mas nunca retornado nas respostas.is_adminboolFlag de papel, padrão false. Protege as rotas exclusivas de admin; um register público nunca consegue defini-la.created_at / updated_atDateTimeTimestamps gerenciados pelo recurso.Rotas que já nascem com ele
A fatia é protegida por padrão (ADR-013 / ADR-021): register e login são públicos, /users/me é self-service para qualquer chamador autenticado, e toda outra rota — incluindo leituras de usuários arbitrários — exige um token bearer de admin. Em um projeto versionado (gize new --api v1) elas ficam sob o prefixo /api/v1.
POST /users/registerPúblicoCria um usuário (nunca admin) e devolve um token de sessão.
POST /users/loginPúblicoTroca email e senha por um token de sessão.
GET /users/meAutenticadoRetorna o registro do próprio chamador, identificado pela claim sub do token. Qualquer token válido funciona — sem exigir flag de admin.
GET /usersAdminLista todos os usuários. Protegida por admin para que a API nunca vaze emails nem permita enumeração via leituras públicas.
POST /usersAdminCria um usuário diretamente, incluindo admins. É assim que admins são criados.
GET /users/:idAdminLê um usuário arbitrário por id.
PUT /users/:idAdminAtualiza um usuário arbitrário por id.
DELETE /users/:idAdminRemove um usuário arbitrário por id.
Níveis de acesso: Público não precisa de token; Autenticado precisa de qualquer token bearer válido; Admin precisa de um token cuja claim is_admin seja true. Crie o primeiro admin com gize createadmin.