Autenticação do Devise com Rails 5

Maria Schuessler Segue 23 de janeiro de 2018 · 4 min ler

O Devise é a pedra angular da autenticação do Ruby on Rails

Com o Devise, criar um usuário que possa efetuar login e logout de seu aplicativo é muito simples, pois o Devise cuida de todos os controladores necessários para a criação do usuário ( users_controller ) e para as sessões do usuário ( users_sessions_controller ). A gem é baseada em Warden e lida com autenticação com bcrypt, eliminando a necessidade de hash e sal manualmente (confie em mim, isso é tão útil. Quando eu estava começando como desenvolvedor isso me mandou para baixo tantos buracos de coelho ..).

Não há realmente nenhuma razão para não usar uma gem de autenticação quando você está trabalhando com o RoR. Implementar a autenticação manualmente é complicado e requer vários controladores e várias horas de configuração (sem incluir testes, você está incluindo testes em seu aplicativo, certo?).

Se você está curioso sobre como o Devise funciona sob o capô, minha sugestão é passar por um tutorial manual para entender os fundamentos da autenticação, criar um aplicativo de teste do Rails que use autenticação manual, ler sobre os princípios e nunca fazê-lo novamente sua empresa faz você fazer isso no futuro).

Esta não é uma visão geral da configuração do Devise – neste post, eu queria passar por cima de algumas vantagens, recursos e algumas desvantagens da gem (e como contorná-las!)

Use o Devise para habilitar a autenticação do usuário em três comandos a partir de um slate limpo.

Usando o Devise com seu modelo

O Devise usa 10 módulos para configurar a autenticação do usuário. Você pode encontrar esses módulos dentro do seu modelo de usuário. Seis desses módulos estão habilitados por padrão (marcado com um *). Modifique a configuração existente no config/initializers/devise.rb .

  • * Autenticável em banco de dados – Hashes e armazena a senha no banco de dados. A autenticação é feita por uma solicitação POST. Necessário para salvar senha de usuário / hash no banco de dados.
  • Omniauthable – Adiciona suporte para o provedor Omniauth, permitindo o login através de provedores de terceiros como Facebook, Twitter, etc.
  • Confirmável – Desativa o acesso à conta do usuário, a menos que um usuário tenha confirmado sua conta por email.
  • * Recuperável – Adiciona um link 'Esqueci minha senha' que permite ao usuário redefinir sua senha usando e-mail
  • * Registrável – Cria um processo de registro, os usuários podem agora editar e excluir sua conta. Desativar para testes beta / sites somente para convite
  • * Rememberable – Cria um token e armazena uma sessão do usuário com um cookie salvo (adiciona a caixa de seleção REMEMBER ME)
  • * Rastreável – rastreia endereços IP do usuário, conta de login, último login e data e hora
  • TimeoutableFaz o logout do usuário após um determinado período de tempo.
  • * Validatable – Usa validações internas do Devise para endereço de email e senha (tamanho, caracteres, etc). Alterar as validações em config / initializers / devise.rb
  • Bloqueável – Bloqueia uma conta após um período de tempo específico ou uma quantidade específica de tentativas de login.

Métodos de ajuda de desenvolvimento

O Devise também vem com algumas funções auxiliares muito úteis:

  • before_action: authenticate_user! – Adicionar a qualquer controlador para limitar o acesso a uma ação, a menos que um usuário esteja logado
 before_action: authenticate_user !, exceto: [: show,: index] before_action: authenticate_user !, somente: [: show,: index] 
  • skip_before_action: authenticate_user! – Como alternativa, você pode adicionar a ação before ao controlador de aplicativo para listar todas as páginas do aplicativo, em seguida, usar o comando skip_before_action para permitir o acesso página por página
 skip_before_action: authenticate_user !, exceto: [: show,: index] skip_before_action: authenticate_user !, somente: [: show,: index] 
  • user_signed_in? – Verifica se o usuário está conectado antes que uma determinada ação possa ser executada. Adicionar ao controlador ou visualizar. Retorna verdadeiro ou falso.
 se user_signed_in? 
FAÇA ALGUMA AÇÃO
outro
FAÇA OUTRA AÇÃO
fim
  • current_user_ – Adicionar ao controlador ou visualização para retornar uma instância do usuário que está executando a ação. Ex Você está criando um restaurante que pertence a um usuário. Configure @restaurant.user para current_user se o usuário atual for o proprietário do restaurante
 @ restaurant.user = current_user 
@ restaurant.save

Rotas

Você não precisa configurar rotas individuais se estiver usando o Devise, apenas adicione uma das seguintes linhas ao seu config/routes.rb :

 devise_for: usuários 
devise_for: MODELNAME (se não estiver usando o usuário como o nome do modelo)

Onde Devise falha

Por padrão, o uso do Devise não impõe senhas fortes. A coisa boa sobre a gema é que ela não armazena a senha – apenas um hash criptografado – mas que ainda permite que os usuários criem senhas como '123456' ou 'senha'. Minha regra geral é que, se os usuários puderem criar senhas inseguras, eles criarão senhas inseguras.

  • Para ativar senhas fortes, adicione a gem do Devise Security Extension (há solicitações para incluí-la no núcleo do Devise, mas quem sabe quando isso acontecerá)

Este é um trabalho em progresso que continuarei atualizando. Eu senti falta de alguma coisa sobre Devise que você gostaria de saber mais sobre isso? Me avise abaixo!