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とパスワードを入力すると続行されますが、そうでない場合は「アクセス拒否」と表示されます。
次に、使用可能なレコードを編集または削除してみてください。そのためには、次のダイアログボックスを使用して認証プロセスを実行する必要があります。