RoR 中實作圖形驗證

安裝

參考 在ruby on rails中实现验证码. 本人環境為 Windows XP ,執行步驟如下:

  1. http://rubyforge.org/frs/?group_id=12&release_id=20692 下載 RMagick-2.3.0-ImageMagick-6.4.0-2-Q8.zip .
  2. 解壓縮後在命令列下執行:
    gem install rmagick-1.14.1-win32.gem
  3. 直接雙擊安裝 ImageMagick .

架構

詳細程式碼請參考 HowtoSecureFormsWithNoisyImages .

本段先分開解釋 MVC 相關的角色. 下一段才會概述整個流程.

Model

建立 NoisyImage 物件,負責產生 驗證圖片物件,所有圖片 Look&Feel 也封裝在此處.

Controller

可自己寫一個新的 Controller 或 把功能放置合適的 Controller 中,基本上負責三件事.

  • 產生 驗證圖片物件 並丟入 Session 中.
  • 將 圖片檔 利用 send_data 方式傳送至客戶端.
  • 比對 客戶回傳的數字 和 驗證圖片物件所內存的數字.

View

利用以下語法顯示出驗證圖片:
<!-- Controller: CheckController, send_data 所在的方法: code_image -->
<!-- 那在 View 中會看到以下程式碼用來呼叫該方法取得驗證圖片. -->

<img src="/check/code_image">

流程

小括號代表該程式碼所在的位置.

[產生需要驗證的新商業邏輯物件(C)] --> [產生驗證圖片物件(C)] --> [建立證圖片物件(M)] --> [驗證圖片物件丟至 Session 中(C)] --> [網頁呼叫圖片檔(V)] --> [圖片檔利用 send_data 傳送(C)] --> 使用者完成輸入動作 --> [比對使用者輸入的數字(C)] --> 成功 or 失敗

問題

Q1 圖片出不來.

A: 確認 View 裡頭呼叫 Controller 回傳圖片方法 的格式有無寫錯(名稱)!

Q2 圖片出來了,但只有底色沒有看字!

A: 參考 主题:用RMagick做验证码图形,文字显示不出来. 是沒有辦法讀到 Font 的問題.

  • 本人最後把要用到的 Font 放置至 跟 app/public 同等級下的 fonts 目錄下(自行建立).
  • 並在 Model 中加入指定 Font 的程式碼.
    text.font = "fonts/" + ['times.ttf', 'arial.ttf', 'verdana.ttf', 'artro.ttf'].sort{rand}.pop

結語

code_image
為了這短短四個字,搞到我快瘋掉! 我實在是很不會解決實作中會碰到的問題,若我只需要專心處理邏輯部份,其他的功能我都能信手拈來那該有多好! 囧rz

延伸閱讀

0 則回應: