Учебники

Ruby on Rails 2.1 — базовая аутентификация HTTP

Rails предоставляет различные способы реализации аутентификации и авторизации. Но самый простой — это новый модуль, который был добавлен в Rails 2.0. Этот модуль является отличным способом выполнить аутентификацию API через SSL.

Чтобы использовать эту аутентификацию, вам нужно будет использовать SSL для транспортировки трафика. В нашем уроке мы собираемся протестировать его без SSL.

Давайте начнем с нашего библиотечного примера, который мы обсуждали на протяжении всего урока. Нам не нужно много делать для реализации аутентификации. Мы добавим несколько строк синим цветом в наш ~ library / app / controllers / book_controller.rb:

Наконец, ваш файл book_controller.rb будет выглядеть следующим образом:

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

Давайте объясним эти новые строки —

  • Первая строка — просто определить идентификатор пользователя и пароль для доступа к различным страницам.

  • Во второй строке мы поместили before_filter , который используется для запуска настроенного метода аутентификации перед любым действием в контроллере. Фильтр может быть ограничен определенными действиями, объявляя действия для включения или исключения. Обе опции принимают отдельные действия (: only =>: index) или массивы действий (: кроме => [: foo,: bar]). Поэтому здесь мы поставили аутентификацию только для операций редактирования и удаления.

  • Из-за второй строки каждый раз, когда вы пытаетесь отредактировать или удалить запись книги, она будет выполнять метод приватной аутентификации .

  • Частный метод аутентификации вызывает метод uthenticate_or_request_with_http_basic , который состоит из блока и отображает диалоговое окно с запросом идентификатора пользователя и пароля для продолжения. Если вы введете правильный идентификатор пользователя и пароль, он будет продолжен, в противном случае будет отображаться «Отказано в доступе».

Первая строка — просто определить идентификатор пользователя и пароль для доступа к различным страницам.

Во второй строке мы поместили before_filter , который используется для запуска настроенного метода аутентификации перед любым действием в контроллере. Фильтр может быть ограничен определенными действиями, объявляя действия для включения или исключения. Обе опции принимают отдельные действия (: only =>: index) или массивы действий (: кроме => [: foo,: bar]). Поэтому здесь мы поставили аутентификацию только для операций редактирования и удаления.

Из-за второй строки каждый раз, когда вы пытаетесь отредактировать или удалить запись книги, она будет выполнять метод приватной аутентификации .

Частный метод аутентификации вызывает метод uthenticate_or_request_with_http_basic , который состоит из блока и отображает диалоговое окно с запросом идентификатора пользователя и пароля для продолжения. Если вы введете правильный идентификатор пользователя и пароль, он будет продолжен, в противном случае будет отображаться «Отказано в доступе».

Теперь попробуйте отредактировать или удалить любую доступную запись, для этого вам нужно будет пройти процедуру аутентификации, используя следующее диалоговое окно.