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.

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:

BotDetect ASP CAPTCHA image sample

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:

BotDetect ASP CAPTCHA image sample

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

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.

language: English Español Tiếng Việt