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 , который состоит из блока и отображает диалоговое окно с запросом идентификатора пользователя и пароля для продолжения. Если вы введете правильный идентификатор пользователя и пароль, он будет продолжен, в противном случае будет отображаться «Отказано в доступе».
Теперь попробуйте отредактировать или удалить любую доступную запись, для этого вам нужно будет пройти процедуру аутентификации, используя следующее диалоговое окно.