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.