Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Ruby on Rails
Lưu ý quan trọng
Vì ví dụ mẫu này sử dụng phiên bản BotDetect CAPTCHA được hiện thực dưới dạng COM component, cả máy chủ và máy lập trình của bạn phải sử dụng hệ điều hành họ Windows. Hiện tại, chúng tôi chưa hỗ trợ trang Ruby on Rails chạy trên các hệ điều hành khác.
Yêu cầu hệ thống
- Ruby 1.8.4+
- Rails 1.1
- a Windows OS
- BotDetect 2.0 ASP CAPTCHA
Bắt đầu bằng cách tải về Dự án mẫu BotDetect CAPTCHA Ruby on Rails.
- Thêm hành động "LanapBotDetect" vào Controller
- Hiển thị hình ảnh CAPTCHA
- Sử dụng âm thanh CAPTCHA
- Xác thực người dùng
Bước 1: Thêm hành động "LanapBotDetect" vào Controller
Trong lớp controller của trang nơi bạn muốn sử dụng BotDetect CAPTCHA, thêm require và định nghĩa hành động LanapBotDetect, như trong sample_controller.rb:
require 'win32ole'
class SampleController < ApplicationController
def LanapBotDetect
if(!params["Command"].nil?)
@command = params["Command"].to_s
@captcha = WIN32OLE.new('Lanap.BotDetect')
if(!params["TextStyle"].nil?)
@captcha.TextStyle = params["TextStyle"].to_s
end
if(!params["ImageWidth"].nil?)
@captcha.ImageWidth = params["ImageWidth"].to_s
end
if(!params["ImageHeight"].nil?)
@captcha.ImageHeight = params["ImageHeight"].to_s
end
if(!params["CodeLength"].nil?)
@captcha.CodeLength = params["CodeLength"].to_s
end
if(!params["CodeType"].nil?)
@captcha.CodeType = params["CodeType"].to_s
end
if(!params["Format"].nil?)
@captcha.Format = params["Format"].to_s
end
if("CreateImage" == @command)
@buffer = @captcha.CreateImage.pack("c*")
session[:code] = @captcha.GetValue
@type = "image/jpeg"
send_data(@buffer, :filename => "captcha.jpg",
:type => @type, :disposition => "inline")
elsif("CreateSound" == @command)
@buffer =
@captcha.CreateSoundFromCode(session[:code]).pack("c*")
@type = "audio/x-wav"
send_data(@buffer, :filename => "captcha.wav",
:type => @type, :disposition => "inline")
end
end
end
end
Bước 2: Hiển thị hình ảnh CAPTCHA
Cách dễ nhất để hiển thị hình ảnh CAPTCHA (sử dụng thông số mặc định) trong định nghĩa .rhtml là dùng thẻ <img> như sau:
<img src="<%= url_for(:action => "LanapBotDetect") + '?Command=CreateImage' %>" alt="CAPTCHA image" />
Nếu bạn đã cài đặt BotDetect và mọi thứ đã được cấu hình đúng, đoạn mã này sẽ hiển thị như dưới đây:
Thiết lập các thuộc tính khác của CAPTCHA
Nếu bạn muốn thiết lập các thuộc tính khác (như kích thước ảnh, kiểu...) chỉ cần truyền chúng dưới dạng tham số của chuỗi truy vấn. Ví dụ:
<img src="<%= url_for(:action => "LanapBotDetect") +
'Command=CreateImage&TextStyle=28&ImageWidth=300&imageHeight=
40&CodeLength=7&CodeType=1&Format=PNG" alt="CAPTCHA image" />
Hình ảnh sinh ra sẽ giống như sau:
Tất cả những tham số khác (ngoài ?Command=CreateImage) là tuỳ chọn, và nếu tham số không được cung cấp, giá trị mặc định sẽ được sử dụng.
Ví dụ, tham số TextStyle xác định giải thuật vẽ CAPTCHA được sử dụng (trong số 50 giải thuật của BotDetect CAPTCHA). Bạn có thể tìm thấy danh sách các giá trị hợp lệ, ví dụ cách sử dụng và hình mẫu tại Tham khảo TextStyle.
Bạn có thể tìm thấy thông tin chi tiết về tất cả các tham số của CAPTCHA trong BotDetect Component Interface.
Sử dụng âm thanh CAPTCHA
Nếu bạn muốn sử dụng âm thanh CAPTCHA để tăng tính truy cập của trang web, cách dễ nhất như sau:
<a href="<%= url_for(:action => "LanapBotDetect") +
'?Command=CreateSound">
<img src="speaker.gif" alt="Play Sound" style="border:0;" />
</a>
Biểu tượng cái loa được sử dụng như đường dẫn để phát âm thanh CAPTCHA. Bạn cũng có thể dùng đường dẫn bằng chữ (vd: "Play Sound") hoặc hình ảnh khác phù hợp với ứng dụng của bạn.
Xác thực người dùng
Trong cách dùng CAPTCHA thông thường, bạn sẽ phải có một textbox trên trang để nhận câu trả lời của người dùng, và so sánh giá trị được nhập vào với mã CAPTCHA. Phương thức Validate của BotDetect CAPTCHA so sánh giá trị của mã CAPTCHA và giá trị truyền vào.
<div id="ValidationDiv">
<%= text_field("Captcha", "TextBoxUserCode", "size" => 20,
"id" => "TextBoxUserCode" ) %>
<%= submit_tag("Validate") %>
<% if params.include?("Captcha") %>
<% if (session[:code] and
params["Captcha"]["TextBoxUserCode"].to_s.upcase ==
session[:code]) %>
<span id='MessageCorrectLabel'>Correct!</span>
<% else %>
<span id='MessageIncorrectLabel'>Incorrect!</span>
<% end %>
<% end %>
</div>
Phiên bản hiện tại của BotDetect
- BotDetect ASP.NET CAPTCHA v2.0.152009–11–23
- BotDetect ASP CAPTCHA v2.0.92009–02–12
Xin lưu ý
Trang này là bản dịch tiếng Việt không chính thức của trang gốc tiếng Anh: How To add BotDetect CAPTCHA protection to Ruby on Rails forms và có thể không chính xác, không đầy đủ hoặc không cập nhật.
Cập nhật ngày 2009-11-30. Áp dụng cho BotDetect ASP.NET CAPTCHA v2.0.15 và BotDetect ASP CAPTCHA v2.0.9.





