Autenticação de usuários com Devise

magem ilustrativa com ícones de cadeado, escudo e logo do Ruby on Rails, acompanhando o título

Como adicionar autenticação de usuários com Devise no seu projeto Ruby on Rails

Se você está acompanhando nossa série sobre como construir uma aplicação web com Ruby on Rails e Supabase, já construímos a base: consumimos dados da API da NASA e conectamos um banco PostgreSQL real. Agora, chegou o momento de permitir que usuários possam se cadastrar, fazer login e acessar recursos personalizados. Aprenda autenticação de usuarios com devise

Perdeu a parte anterior? Volte e veja o artigo precedente a este: Integrar Ruby on Rails a um PostgreSQL gratuito.

A melhor forma de fazer isso no Rails é com a gem devise. Vamos aprender a adicioná-la passo a passo.

Por que usar o Devise?

  • Cadastro e login de usuários
  • Recuperação de senha
  • Confirmação por e-mail
  • Bloqueio de conta após várias tentativas erradas
  • E muito mais, com configuração flexível

1. Instalando a gem Devise

Abra o seu Gemfile e adicione:

gem 'devise'

Depois, rode:

bundle install

Em seguida, instale os arquivos iniciais do Devise:

rails generate devise:install

2. Criando o modelo User

Agora, vamos criar o modelo de usuário com suporte a autenticação:

rails generate devise User

Isso cria o model User, uma migration com os campos de login e o setup padrão para autenticação.

Em seguida, rode a migration:

rails db:migrate

Corrigindo erro “uninitialized constant ApplicationRecord”

Após esse passo, é possível que o erro abaixo apareça ao tentar rodar a aplicação:

uninitialized constant ApplicationRecord

Esse erro ocorre porque o arquivo app/models/application_record.rb está ausente. Todos os models no Rails herdam de ApplicationRecord, por isso sua presença é essencial.

Para resolver:

Crie o arquivo app/models/application_record.rb com o seguinte conteúdo:

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true
end

3. Gerando as views do Devise

Se quiser customizar o layout das páginas de login, cadastro etc., gere as views do Devise com:

rails generate devise:views

4. Testando autenticação

Inicie o servidor:

rails server

Acesse no navegador:

5. Protegendo rotas com autenticação

Para proteger páginas que requerem login, use o seguinte filtro no controller:

before_action :authenticate_user!

Exemplo para proteger todas as rotas de NotesController:

class NotesController < ApplicationController
  before_action :authenticate_user!

  def index
    @notes = current_user.notes
  end
end

6. Associando dados ao usuário logado

Ao criar modelos relacionados a usuários, você pode associar ao usuário com:

note = current_user.notes.build(title: "Nova nota")
note.save

7. Melhorias possíveis

  • Adicionar confirmação de e-mail (com confirmable)
  • Redirecionar para páginas personalizadas após login/logout
  • Estilizar as views com CSS ou Tailwind
  • Criar roles de usuário (admin, leitor etc.) com enum ou gems complementares

Conclusão

Com Devise, sua aplicação Rails ganha autenticação segura e robusta com poucas linhas de código. A partir de agora, podemos salvar favoritos por usuário e implementar recursos personalizados com base em quem está logado.

No próximo artigo, vamos integrar isso ao frontend e permitir que cada usuário veja apenas seus dados.

Ficou com alguma dúvida ou teve algum erro na configuração? Comente abaixo! Vamos evoluir juntos.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *