Login e Logout no Rails 8 para apressadinhos

Criando o login

Dê um:

rails g authentication

Você vai ver algo assim no seu terminal:

Depois disso, confira se a gem bcrypt está descomentada. Caso não esteja, descomente e salve a alteração. Precisaremos dela para a encriptação…


This content originally appeared on DEV Community and was authored by Dominique Morem

Criando o login

Dê um:

rails g authentication

Você vai ver algo assim no seu terminal:

'Image description'

Depois disso, confira se a gem bcrypt está descomentada. Caso não esteja, descomente e salve a alteração. Precisaremos dela para a encriptação de senhas.

Migrando atualizando o BD com as novas tabelas geradas

Veja que ao dar o comando do generate de autenticação (para criar o login) o Rails realizou - entre outras ações - a criação de três models: current, user e session.

'Image description'

Logo, precisamos atualizar o nosso banco de dados para passar a ter essas respectivas tabelas.

Para isso vamos dar um...

rails db:migrate

... para efetivar essas mudanças no banco de dados.

'Image description'

Logando na Aplicação

Há duas formas de você logar na aplicação:

  1. Pode ser utilizando os emails que constam pré-configurados na pasta fixtures (como mostra Typecraft em seu vídeo).

  2. Pode ser você criando no banco de dados o seu próprio registro de usuário. Você pode criar o usuário que você quiser por lá.

1 - Logando com e-mails pré-configurados

Para acessá-los vamos em:

test > fixtures > files > users.yml

'Image description'

Agora vamos ajeitar as senhas (as senhas vêm por padrão como 'password') mas para poder utilizá-las é preciso dar um comando antes...

Vamos dar um:

rails db:fixtures:load

Rápida explicação sobre rails db:fixtures:load - Início

Esse comando serve para carregar os dados definidos nos arquivos de
fixtures(geralmente .yml - como o users.yml por exemplo -
dentro de test/fixtures/) para o banco de dados.

Ou seja, o Rails vai ler os arquivos YAML de fixtures, por exemplo
test/fixtures/users.yml e vai inserir os dados definidos nesses
arquivos nas respectivas tabelas do banco.

Rápida explicação sobre rails db:fixtures:load - Final

Selecione um dos emails presentes no arquivo users.yml
(test > fixtures > files) para colocar no campo de email do login.

E, como senha, utilize a palavra: password

'Image description'

Bingo! Ele vai entrar!

'Image description'

2 - Logando na aplicação com o seu e-mail

Para logar com o seu email ou com qualquer outro exemplo de email que te der na telha, faça o seguinte:

No terminal, dê um:

rails c

Para acessar o console do Rails.

Uma vez neste, digite:

User.new 

para visualizar os nomes dos campos...

'Image description'

Perfeito! Desses campos o único que você vai copiar na íntegra é o email_address:.

Isso porque o id, o created_at: e o updated_at: são preenchidos automaticamente pelo Rails quando você cria o registro.

A questão do password_digest

NÃO PASSE O COMANDO DE CRIAÇÃO DO REGISTRO COM password_digest DIRETAMENTE (!!!) - Vá por mim, eu fiquei quebrando cabeça um tempão porque cometi esse erro e não sabia porque não estava dando certo!

Ao tentar criar um registo como:

User.create!(email: "teste@email.com", password_digest: "123456")

Isso não criptografará nada. Você estará gravando "123456" puro na coluna, o que significa dizer que a senha real estará exposta no banco (o que se trata de um gravíssimo risco de segurança). E, o método authenticate não vai funcionar, porque ele espera um hash BCrypt, não o texto plano. Basicamente, você quebrará o fluxo do Rails Auth.

Dê preferência por preencher o campo de senha apenas com password:

Quando você passa password: "123456" o has_secure_password intercepta o setter password= e usa a gem BCrypt para criar um hash seguro dessa senha. Com isso ele vai gravar esse hash no campo password_digest antes de salvar.

Ps: não precisa utilizar password_confirmation se não quiser validação de confirmação.

Por fim, depois dessa digressão toda, a criação do usuário no BD vai ficar estruturada assim:

User.create!(email_address: "tim.maia@hotmail.com", password: "descobridor_dos_sete_mares")

Obs: A exclamação (!) no final do create é para ele gerar uma mensagem de erro caso a inserção do registro no BD dê too much wrong.

Plim! Registro bem sucedido!

'Image description'

Vamos testar para ver se funcionou mesmo:

'Image description'

Foi, deu certo!

'Image description'

Saindo da aplicação - Fazendo Logout

Para deslogar da aplicação você pode inserir no seu menu principal da aplicação - ou em algum lugar da homepage - o seguinte botão (que Exequiel Rozas criou), que já vem pré-configurado:

<% if Current.user.present? %>
  <%= button_to "Sign out", session_path, method: :delete, class: "inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-black underline focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500" %>
<% else %>
  <%= link_to "Sign in", new_session_path, class: "inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500" %>
<% end %>

Vai ficar mais ou menos assim:

'Image description'

'Image description'

Digo 'mais ou menos' assim porque eu mudei o tailwind original dos botões para ficarem vermelho e verde:

<% if Current.user.present? %>
    <%= button_to "Sign out", session_path, method: :delete, class: "focus:outline-none text-white bg-red-700 hover:bg-red-800 focus:ring-4 focus:ring-red-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-900" %>
<% else %>
    <%= link_to "Sign in", new_session_path, class: "focus:outline-none text-white bg-green-700 hover:bg-green-800 focus:ring-4 focus:ring-green-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-green-600 dark:hover:bg-green-700 dark:focus:ring-green-800" %>
<% end %>

Falta agora configurar para que você só veja as suas postagens e ous outros só vejam as postagens ou publicações deles. Mas isso é tema para um outro post...

Agradecimentos:

Se pude criar este minitutorial devo isso a 3 pessoas me passaram um pouco do seu conhecimento:

  • Professor Anchieta (meu professor de Programação Avançada)
  • Typecraft do Canal Ruby on Rails
  • E Exequiel Rozas


This content originally appeared on DEV Community and was authored by Dominique Morem


Print Share Comment Cite Upload Translate Updates
APA

Dominique Morem | Sciencx (2025-08-12T20:31:52+00:00) Login e Logout no Rails 8 para apressadinhos. Retrieved from https://www.scien.cx/2025/08/12/login-e-logout-no-rails-8-para-apressadinhos/

MLA
" » Login e Logout no Rails 8 para apressadinhos." Dominique Morem | Sciencx - Tuesday August 12, 2025, https://www.scien.cx/2025/08/12/login-e-logout-no-rails-8-para-apressadinhos/
HARVARD
Dominique Morem | Sciencx Tuesday August 12, 2025 » Login e Logout no Rails 8 para apressadinhos., viewed ,<https://www.scien.cx/2025/08/12/login-e-logout-no-rails-8-para-apressadinhos/>
VANCOUVER
Dominique Morem | Sciencx - » Login e Logout no Rails 8 para apressadinhos. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2025/08/12/login-e-logout-no-rails-8-para-apressadinhos/
CHICAGO
" » Login e Logout no Rails 8 para apressadinhos." Dominique Morem | Sciencx - Accessed . https://www.scien.cx/2025/08/12/login-e-logout-no-rails-8-para-apressadinhos/
IEEE
" » Login e Logout no Rails 8 para apressadinhos." Dominique Morem | Sciencx [Online]. Available: https://www.scien.cx/2025/08/12/login-e-logout-no-rails-8-para-apressadinhos/. [Accessed: ]
rf:citation
» Login e Logout no Rails 8 para apressadinhos | Dominique Morem | Sciencx | https://www.scien.cx/2025/08/12/login-e-logout-no-rails-8-para-apressadinhos/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.