Dev (Back & Front)ARTIGO

Aprenda a implementar uma Basic Authentication com Rails

Vou mostrar uma maneira simples, mas usual de implementação, que pode acontecer em duas frentes: Nginx ou Apache ou direto na aplicação Rails.

Por vários motivos você pode querer implementar algum tipo de autenticação na sua aplicação Rails. Seja por que o produto que você está trabalhando ainda não deve ser mostrado para o público em geral, ou seja porque este é apenas um ambiente de desenvolvimento e as novas features ainda estão em fase de desenvolvimento.

Ou até mesmo o acesso a este ambiente é restrito a apenas alguns usuários, como por exemplo uma área administrativa. Muito embora para esta última alternativas exista outras opções muito mais interessantes, como por exemplo o Devise.

Aqui vou mostrar uma maneira bastante simples, mas ainda assim bastante usual para implementar uma “Basic Authentication”. Essa implementação pode acontecer em duas frentes: Nginx ou Apache ou direto na aplicação Rails. A segunda frente é a que vou cobrir neste artigo.

Como qualquer outra autenticação, a operação básica é fechar recursos para pessoas não autorizadas. A autorização a estes recursos – URLs – são liberadas desde que um username e senha seja conhecida pela aplicação.

Com Rails o processo é bastante simples:

  • Implemente um metodo que será executado através do filtro: before_filter para todos os métodos do controller
  • Defina este método no before_filter

Este é um exemplo de como o método a ser executado deve se parecer. Repare no método especial do Rails simpaticamente chamado de authenticate_or_request_with_http_basic:

class SecureApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

  
  before_filter :authentication

  protected

  def authentication
    authenticate_or_request_with_http_basic do |username, password|
      username == "usuario" && password == "senha"
    end
  end

end

Para ver este código em ação, basta você trocar a ApplicationController nos seus controllers pela SecureApplicationController.

Você pode deixar esta autenticação bastante sofisticada, por exemplo, implementando os usuários e senhas em uma base de dados. Outro ponto é se você precisar saber quem é o usuário autenticado. O Rails possui um outro método que pode ser chamado de dentro do seu controller bastante simpático, que retorna duas variáveis: username e senha do usuário autenticado no momento:

@username, @senha = ActionController::HttpAuthentication::Basic::user_name_and_password(request)

O código completo desta aplicação e seu comportamento você pode obter através do meu Github: https://github.com/mangar/rails_basic_authentication

é formado em Ciencia da Computação, é Lider Técnico, DevOp e programador nas madrugadas. Utiliza várias linguagens de programação para resolver seus problemas como: Java, Python, Ruby. Tem utilizado Arduino e Raspberry Pi integrado com Apps Android para resolver problemas domésticos e conviver de forma pacífica com sua preguiça controlando as coisas com um apertar de botão no celular. Possui várias certificações Java e ultimamente está se aventurando pelo mundo de IaaS e PaaS.

Ver perfil