Ruby on Rails 2.1 - Xác thực cơ bản HTTP
Rails cung cấp nhiều cách khác nhau để thực hiện xác thực và ủy quyền. Nhưng đơn giản nhất là một mô-đun mới, đã được thêm vào trong Rails 2.0. Mô-đun này là một cách tuyệt vời để thực hiện xác thực API qua SSL.
Để sử dụng xác thực này, bạn sẽ cần sử dụng SSL cho giao thông vận tải. Trong hướng dẫn của chúng tôi, chúng tôi sẽ kiểm tra nó mà không cần SSL.
Hãy để chúng tôi bắt đầu với ví dụ thư viện của chúng tôi mà chúng tôi đã thảo luận trong suốt hướng dẫn. Chúng tôi không có nhiều việc phải làm để triển khai xác thực. Chúng tôi sẽ thêm một vài dòng màu xanh lam trong~library/app/controllers/book_controller.rb:
Cuối cùng, của bạn book_controller.rb tệp sẽ trông như sau:
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
Hãy để chúng tôi giải thích những dòng mới này -
Dòng đầu tiên chỉ là xác định ID người dùng và mật khẩu để truy cập các trang khác nhau.
Trong dòng thứ hai, chúng tôi đã đặt before_filter , được sử dụng để chạy phương thức đã cấu hình xác thực trước bất kỳ hành động nào trong bộ điều khiển. Một bộ lọc có thể được giới hạn cho các hành động cụ thể bằng cách khai báo các hành động để bao gồm hoặc loại trừ. Cả hai tùy chọn đều chấp nhận các hành động đơn lẻ (: only =>: index) hoặc các mảng hành động (: ngoại trừ => [: foo,: bar]). Vì vậy, ở đây chúng tôi đã đặt xác thực chỉ cho các hoạt động chỉnh sửa và xóa.
Do dòng thứ hai, bất cứ khi nào bạn cố gắng chỉnh sửa hoặc xóa một bản ghi sách, nó sẽ thực thi phương thức xác thực riêng tư .
Phương thức xác thực riêng tư đang gọi phương thức uthenticate_or_request_with_http_basic , bao gồm một khối và hiển thị một hộp thoại để yêu cầu User ID và Mật khẩu để tiếp tục. Nếu bạn nhập đúng ID người dùng và mật khẩu thì nó sẽ tiếp tục, nếu không nó sẽ hiển thị 'quyền truy cập bị từ chối'.
Bây giờ, hãy thử chỉnh sửa hoặc xóa bất kỳ bản ghi có sẵn nào, để làm như vậy, bạn sẽ phải trải qua quá trình xác thực bằng hộp thoại sau.