Skip to content

Instantly share code, notes, and snippets.

@fokayx
Last active September 19, 2015 05:29
Show Gist options
  • Save fokayx/7db2ad616580eee28ce9 to your computer and use it in GitHub Desktop.
Save fokayx/7db2ad616580eee28ce9 to your computer and use it in GitHub Desktop.
reCAPTCHA note and API Key setting on heroku with Traditional Chinese,

#reCAPTCHA for Rails > 3.0

目前的reCAPTCHA版本已不支援Rails 3.0以下的專案,如果你的專案用的是Rails 3.0以下,你可以去找reCAPTCH過去發佈的版本,並按照說明進行安裝。 reCAPTCHA @ GitHub: https://github.com/ambethia/recaptcha

##Rails安裝方法 打開 Gemfile,加入recaptcha。

gem "recaptcha", :requier => "recaptcha/rails"

###設定你的reCAPTCHA API Keys 如果你尚未註冊過,請到Google reCAPTCHA為你的網站申請。

Label: 設定一個標籤,方便進行辨識與管理。
範例:(網址: 說明) => example.com: user registering
Domains: 相連的域名都要一起加進來進行註冊,例如subdomain.domain.com,一行寫一個域名,不需要寫到path。
如果所填寫的域名和reCAPTCHA API Key配不起來的話,就會出現internal error occurred recaptcha… 的錯誤訊息。

填寫完Label、Domain,按下Register進行註冊,就會為你的網站產生一組reCAPTCHA設定,包含Site key、Secret key、js、reCAPTCHA widget。

###reCAPTCHA 設置 在Rails專案中新增reCAPTCHA的設定檔:config/initializers/recaptcha.rb,並設定reCAPTCHA API Key。

Recaptcha.configure do |config|
    config.public_key = '6Lc6BAAAAAAAAChqRbQZcn_yyyyyyyyyyyyyyyyy'
    config.private_key = '6Lc6BAAAAAAAAChqRbQZcn_xxxxxxxxxxxxxxxx'
    # Uncomment the following line if you are using a proxy server:
    # config.proxy = 'http://myproxy.com.au:8080'
    # Uncomment if you want to use the newer version of the API,
    # only works for versions >= 0.3.7:
    # config.api_version = 'v2'
end

# 如果是使用Google reCAPTCHA:config.public_key = 'Site key',config.private_key = 'Secret key'

###reCAPTCHA API Key 保護 如果會將專案推到GitHub或作公開分享,為了保護自己的reCAPTCHA API Key,可以這麼做。

# config/initializers/recaptcha.rb
Recaptcha.configure do |config|
    config.public_key = ENV["RECAPTCHA_PUBLIC_KEY"]
    config.private_key = ENV["RECAPTCHA_PRIVATE_KEY"]
end

# config/secrets.yml
production:
  recaptcha_public_key: <%= ENV["RECAPTCHA_PUBLIC_KEY"] %>
  recaptcha_secret_key: <%= ENV["RECAPTCHA_PRVATE_KEY"] %>

###Sever Shell 環境設定 reCAPTCHA API Key

export RECAPTCHA_PUBLIC_KEY = '6Lc6BAAAAAAAAChqRbQZcn_yyyyyyyyyyyyyyyyy'
export RECAPTCHA_PRIVATE_KEY = '6Lc6BAAAAAAAAChqRbQZcn_xxxxxxxxxxxxxxxx'

###Heroku設定 reCAPTCHA API Key 如果是要佈署到Heroku上,為了要保密 reCAPTCHA API Key,可以用下列方法設定 RECAPTCHA_PUBLIC_KEY、RECAPTCHA_PRIVATE_KEY。

heroku config:set RECAPTCHA_PUBLIC_KEY = "YOUR PUBLIC KEY"
heroku config:set RECAPTCHA_PRIVATE_KEY = "YOUR PRIVATE KEY"

###在網頁中使用reCAPTCHA 在網站需要做驗証的頁面中加入recaptcha_tags

<%= form_for @foo do |f| %>
    #......
    <%= recaptcha_tags %>
    #......
<% end %>

###recaptcha_tags 屬性

:ssl
:noscript (引入 <noscript>內容,預設 true。)
:display (theme和 tabindex的選項設定,預設 nil,選項有 'red', 'white', 'blackglass', 'clean', 'custom'。 ex: :display => {:theme => 'white'} )
:ajax (使用動態AJAX captcha,預設 false。)
:public_key (Site key設定,優先使用 ENV中的參數設定,預設nil。)
:error (Override the error code returned from the reCAPTCHA API (default nil)

###reCAPTCHA進行驗証:verify_recaptcha 接著在要驗証的controller action,寫入 verify_recaptcha。 經過reCAPTCAH驗証後會回傳truefalse

# 以發佈文章為例
class PostController < ApplicationController
    def create
        @post = Post.new
        if verify_recaptcha(:model => @post, :message => "OH, NO! It's error with reCAPTCHA") && @post.save
            #...(通過驗証)
        else
            #...(驗証失敗)
        end
    end
end

設定參數:
:model (Model to set errors)
:attribute (Model attribute to receive errors (default :base))
:message (客製化錯誤訊息。)
:private_key (設定Secret API key,會優先使用 ENV中的參數設定,預設 `nil`。)
:timeout (等待reCAPTCHA服務的時間,預設是 3秒。)

###l18n 支援 reCAPTCHA提供2種錯誤訊息,如果專案中有安裝 l18n, l18n將會直接對預設的錯誤訊息進行翻譯。如果想客製化訊息,需要在l18n backend中加入下列代碼:

recaptcha.errors.verification_failed (當使用者輸入不符合 captcha,顯示錯誤訊息)
recaptcha.errors.recaptcha_unreachable (在驗証captcha時,如果發生timeout,顯示錯誤訊息)

編輯客製化錯誤訊息:

# config/locales/en.yml
en:
    recaptcha:
        errors:
            incorrect-captcha-sol: 'Fail'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment