- 學習 Ruby on Rails
- Rails 2.1 首頁
- Rails 2.1 簡介
- Rails 2.1 安裝
- Rails 2.1 框架
- Rails 2.1 目錄結構
- Rails 2.1 示例
- Rails 2.1 資料庫設定
- Rails 2.1 Active Records
- Rails 2.1 資料遷移
- Rails 2.1 控制器
- Rails 2.1 檢視
- Rails 2.1 佈局
- Rails 2.1 腳手架
- Rails 2.1 和 AJAX
- Rails 2.1 上傳檔案
- Rails 2.1 傳送郵件
- 高階 Ruby on Rails 2.1
- Rails 2.1 RMagick 指南
- Rails 2.1 基本 HTTP 認證
- Rails 2.1 錯誤處理
- Rails 2.1 路由系統
- Rails 2.1 單元測試
- 高階 Ruby on Rails 2.1
- Rails 2.1 提示與技巧
- 快速參考指南
- 快速參考指南
- Ruby on Rails 2.1 有用資源
- Ruby on Rails 2.1 - 資源
- Ruby on Rails 2.1 - 討論
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 和密碼。
在第二行中,我們使用了 before_filter,它用於在控制器中的任何操作之前執行配置的方法 authenticate。可以透過宣告要包含或排除的操作來將過濾器限制在特定操作上。這兩個選項都接受單個操作(:only => :index)或運算元組(:except => [:foo, :bar])。因此,這裡我們僅對編輯和刪除操作進行了身份驗證。
由於第二行,每當您嘗試編輯或刪除圖書記錄時,它都會執行私有 authenticate 方法。
私有 authenticate 方法正在呼叫 uthenticate_or_request_with_http_basic 方法,該方法包含一個程式碼塊並顯示一個對話方塊以詢問使用者 ID 和密碼以繼續。如果您輸入正確的使用者 ID 和密碼,則會繼續,否則會顯示“訪問被拒絕”。
現在,嘗試編輯或刪除任何可用的記錄,為此您需要透過以下對話方塊進行身份驗證過程。
廣告