Ruby on Rails 2.1 - Autenticação HTTP Básica

O Rails fornece várias maneiras de implementar autenticação e autorização. Mas o mais simples é um novo módulo, que foi adicionado no Rails 2.0. Este módulo é uma ótima maneira de fazer autenticação de API por SSL.

Para usar essa autenticação, você precisará usar SSL para transporte de tráfego. Em nosso tutorial, vamos testá-lo sem SSL.

Vamos começar com nosso exemplo de biblioteca que discutimos ao longo do tutorial. Não temos muito que fazer para implementar a autenticação. Vamos adicionar algumas linhas em azul em nosso~library/app/controllers/book_controller.rb:

Finalmente, o seu book_controller.rb arquivo terá a seguinte aparência -

class BookController < ApplicationController

USER_ID, PASSWORD = "zara", "pass123"
 
# Require authentication only for edit and delete operation
   before_filter :authenticate, :only => [ :edit, :delete ]
  
def list
   @books = Book.find(:all)
end
   
def show
   @book = Book.find(params[:id])
end
   
def new
   @book = Book.new
   @subjects = Subject.find(:all)
end
   
def create
   @book = Book.new(params[:book])
   if @book.save
      redirect_to :action => 'list'
   else
      @subjects = Subject.find(:all)
      render :action => 'new'
   end
end
   
def edit
   @book = Book.find(params[:id])
   @subjects = Subject.find(:all)
end
   
def update
   @book = Book.find(params[:id])
   if @book.update_attributes(params[:book])
      redirect_to :action => 'show', :id => @book
   else
      @subjects = Subject.find(:all)
      render :action => 'edit'
   end
end
   
def delete
   Book.find(params[:id]).destroy
   redirect_to :action => 'list'
end
   
def show_subjects
   @subject = Subject.find(params[:id])
end
   
private
   def authenticate
      authenticate_or_request_with_http_basic do |id, password| 
         id == USER_ID && password == PASSWORD
      end
   end
end

Deixe-nos explicar essas novas linhas -

  • A primeira linha serve apenas para definir o ID do usuário e senha para acessar várias páginas.

  • Na segunda linha, colocamos before_filter , que é usado para executar o método configurado autenticar antes de qualquer ação no controlador. Um filtro pode ser limitado a ações específicas, declarando as ações a serem incluídas ou excluídas. Ambas as opções aceitam ações únicas (: somente =>: índice) ou matrizes de ações (: exceto => [: foo,: bar]). Portanto, aqui colocamos a autenticação apenas para operações de edição e exclusão.

  • Devido à segunda linha, sempre que você tentar editar ou excluir um registro de livro, ele executará o método de autenticação privada .

  • Um método de autenticação privado está chamando o método uthenticate_or_request_with_http_basic , que consiste em um bloco e exibe uma caixa de diálogo para solicitar o ID do usuário e a senha para prosseguir. Se você inserir um ID de usuário e senha corretos, ele continuará; caso contrário, será exibido 'acesso negado'.

Agora, tente editar ou excluir qualquer registro disponível, para fazer isso você teria que passar pelo processo de autenticação usando a seguinte caixa de diálogo.