Ruby-on-rails-2.1-rails-http-basic-authentication

提供:Dev Guides
移動先:案内検索

Ruby on Rails 2.1-HTTP基本認証

Railsは、認証と承認を実装するさまざまな方法を提供します。 しかし、最も簡単なものは、Rails 2.0に追加された新しいモジュールです。 このモジュールは、SSLを介したAPI認証を行うのに最適な方法です。

この認証を使用するには、トラフィックの転送に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

これらの新しい行を説明しましょう-

  • 最初の行は、さまざまなページにアクセスするためのユーザーIDとパスワードを定義することです。
  • 2行目には、_before_filter_を配置しました。これは、コントローラー内のアクションの前に、構成済みメソッド_authenticate_を実行するために使用されます。 含めるまたは除外するアクションを宣言することにより、フィルターを特定のアクションに制限できます。 両方のオプションは、単一のアクション(:only ⇒:index)またはアクションの配列(:except ⇒ [:foo、:bar])を受け入れます。 そのため、ここでは編集および削除操作のみに認証を設定しました。
  • 2行目のため、書籍のレコードを編集または削除しようとするたびに、private _authenticate_メソッドが実行されます。
  • プライベート_authenticate_メソッドは、_uthenticate_or_request_with_http_basic_メソッドを呼び出しています。このメソッドは、ブロックで構成され、ユーザーIDとパスワードを求めるダイアログボックスを表示して続行します。 正しいユーザーIDとパスワードを入力すると続行されますが、そうでない場合は「アクセス拒否」と表示されます。

次に、使用可能なレコードを編集または削除してみてください。そのためには、次のダイアログボックスを使用して認証プロセスを実行する必要があります。

HTTP基本認証