安裝
參考 在ruby on rails中实现验证码. 本人環境為 Windows XP ,執行步驟如下:
- 至 http://rubyforge.org/frs/?group_id=12&release_id=20692 下載 RMagick-2.3.0-ImageMagick-6.4.0-2-Q8.zip .
- 解壓縮後在命令列下執行:
gem install rmagick-1.14.1-win32.gem
- 直接雙擊安裝 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
結語
為了這短短四個字,搞到我快瘋掉! 我實在是很不會解決實作中會碰到的問題,若我只需要專心處理邏輯部份,其他的功能我都能信手拈來那該有多好! 囧rz
0 則回應: