Pular para o conteúdo principal

Acts as user

O método acts_as_user do Nerdify serve para configurar um modelo como usuário autenticável na aplicação. Ele é um atalho direto para o método devise, aceitando os mesmos módulos e opções, mas com uma integração específica ao Mongoid e à arquitetura do Nerdify.


✅ O que o acts_as_user faz

Internamente, acts_as_user:

  • ✅ Executa o método devise, passando exatamente os módulos informados
  • ✅ Adiciona automaticamente os campos necessários para cada módulo funcionar corretamente com Mongoid
  • ✅ Conecta o modelo ao sistema de autenticação por token (devise_token_auth)
  • ✅ Integra com o roteamento dinâmico do Nerdify, habilitando as rotas automaticamente
  • ✅ Garante compatibilidade com o ciclo de vida do Nerdify (current_user, current_ability)
  • ✅ Permite que o controlador de sessões gere telas de login, recuperação, convite, etc.

🛠 Como usar

No seu modelo, basta incluir:

class User
include Mongoid::Document
include Nerdify::Model

acts_as_user :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, :confirmable
end

⚙️ Módulos suportados

Você pode passar qualquer módulo válido do Devise, como faria normalmente com devise:

MóduloDescrição
:database_authenticatableLogin com email e senha
:registerablePermite cadastro de novos usuários via API
:recoverableRecuperação de senha via email
:rememberableLogin persistente com cookies
:validatableValidação de email e senha
:confirmableConfirmação de conta por email
:trackableRegistra IP, login atual/anterior, etc
:lockableBloqueio automático após X tentativas
:omniauthableLogin via provedores externos (Google, GitHub...)

📌 Por padrão, nenhum módulo é ativado automaticamente — você deve passar os desejados na chamada do acts_as_user.


🧬 Campos adicionados automaticamente

Com base nos módulos passados, o acts_as_user inclui os campos necessários automaticamente, de forma transparente, através do Mongoid:

Exemplos de campos adicionados, conforme os módulos:

CampoMódulo relacionado
email, encrypted_password:database_authenticatable
reset_password_token, reset_password_sent_at:recoverable
remember_created_at:rememberable
confirmation_token, confirmed_at:confirmable
tokens, uid, providerdevise_token_auth (sempre incluído)

🧩 Não é necessário declarar manualmente esses campos. O Nerdify os define dinamicamente ao incluir o módulo com acts_as_user.


🔐 Rotas automáticas via Nerdify

Ao incluir acts_as_user, as rotas de autenticação são ativadas automaticamente via Nerdify::Router.dynamic_routes, permitindo:

MétodoRotaFunção
POST/api/v1/sessionLogin com JWT
DELETE/api/v1/sessionLogout
GET/api/v1/users/sign_inTela de login
GET/api/v1/users/password/newRecuperação de senha
GET/api/v1/users/confirmationConfirmação de conta

📄 Controle e renderização de sessão

Se o controlador que cuida do usuário herdar de Nerdify::SessionsController, ele saberá gerar dinamicamente:

  • Tela de login
  • Confirmação de email
  • Recuperação de senha
  • Convites, se configurado

Exemplo:

class Api::V1::UsersController < Nerdify::SessionsController
authenticate User, auth_path: "users/sign_in", only: [:destroy]
template "nerdify/templates/template_session"
end

🔁 O controlador de sessão interpreta os módulos ativos e gera as páginas necessárias com base no que está disponível.


🧠 Integração com ciclo de vida

Modelos com acts_as_user são integrados ao ciclo do Nerdify:

  • Disponibilizam current_user e current_ability nas requisições
  • São utilizados pelos authenticate dos controladores
  • Permitem controle de acesso via Ability
  • São reconhecidos como usuários válidos nas permissões (can? :manage, Model)