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:
- Cadastro: http://localhost:3000/users/sign_up
- Login: http://localhost:3000/users/sign_in
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.