2013-10-04 24 views
1

標題中的錯誤僅在螢火蟲中可見。一切從我把recaptcha元素放在下面的地方都沒有顯示在頁面上,儘管它出現在page-source(Mozilla和Opera)中 - 儘管沒有在螢火蟲中顯示錯誤。到目前爲止,基於其他解決方案,我嘗試了反轉鍵(public和private,儘管它們已被清楚地標識),生成全局鍵對並使用它們,甚至將這些值硬編碼到recaptcha.rb初始化文件與使用system-vars。任何情況下在開發或生產中都沒有運氣。也試圖壓制'noscript'部分,沒有任何改變。Recaptcha ambethia - 輸入錯誤:k:網站密鑰的格式無效/無效 - 請求 - Cookie

創業板生成的頁面源讀取:

<script type="text/javascript" src="//www.google.com/recaptcha/api/challenge?k=[" mypublickeyhere", "myprivatekeyhere", false]&amp;lang="></script> 
    <noscript> 
     <iframe src="//www.google.com/recaptcha/api/noscript?k=["mypublickeyhere", "myprivatekeyhere", false]" height="300" width="500" style="border:none;"></iframe><br/> 
     <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea> 
     <input type="hidden" name="recaptcha_response_field" value="manual_challenge"/></noscript> 

爲什麼我的私鑰可見的頁面源?所有這些代碼來自把這個在我看來:

<%= recaptcha_tags %> 

編輯:取得了一些進展,許多小時,通過填鴨式的形式和控制器的按鍵:

<%= recaptcha_tags :public_key => 'mypublickeyhere' %> 

if (verify_recaptcha :private_key => 'myprivatekeyhere') 

它得到的ReCaptcha露面的形式,並保持我的私鑰被垃圾郵件給頁面代碼與插件的默認模式一樣。

不幸的是,即使captcha輸入正確,我們也會收到一個NEW Error,「invalid-request-cookie」。

有沒有在Rails 3中使用這個插件的一個例子,完整的工作形式和控制器代碼?


更多信息的其他病友:

谷歌說,這個錯誤是指:「驗證腳本的挑戰參數是不正確的。」如果你搜索「挑戰參數」,找出無論什麼,谷歌說:「recaptcha_challenge_field是一個隱藏的領域,描述用戶正在解決的驗證碼,它對應於'挑戰' reCAPTCHA驗證API所需的參數「。

那麼,爲什麼插件沒有提供正確的挑戰參數?也許我需要在某個地方傳遞某些東西 - 但是在哪裏?再次,一個簡單的例子會很棒。

回答

2

0.0。設置變量 - 旁邊:

使用ENV ['key']將密鑰保留在代碼庫之外(儘管您可以在/config/environments/development.rb中對它們進行硬編碼,然後不會將此文件包含在您的作品中服務器(Heroku上,加入了推送文件夾gitignore)。

我將此添加到我的development.rb文件

# Set variables for Recaptcha on Localhost 
    ENV['RECAPTCHA_PUBLIC_KEY'] = 'mypublickeyhere' 
    ENV['RECAPTCHA_PRIVATE_KEY'] = 'myprivatekeyhere' 

你會把你的真實鍵值到位mybpublickeyhere和myprivatekeyhere的。

您也可以在開發機器上設置ENV變量。我不想添加那種混亂,因爲這臺機器一次用於開發許多網站。

如果部署到Heroku的,在此瞭解如何設置這些ENV變量: http://devcenter.heroku.com/articles/config-vars

1.0獲取一組全局密鑰,不依賴於任何特定的域,並使用這些測試。消除潛在的問題後,當所有人都在工作時,將您的域特定密鑰放入生產機器中,然後重新測試。

2.0不要使用'默認'方法。據我所知,它根本行不通 - 也許它曾經做過,谷歌改變了一些 - 我不知道,但它可能會/會給你可怕的「輸入錯誤:k:站點密鑰格式無效」和將向任何查看網頁源代碼的人展示您的私鑰。

解決方案是強制將鍵輸入到窗體和控制器中。因此,在你的形式,這將看起來像:

<%= recaptcha_tags :public_key => ENV['RECAPTCHA_PUBLIC_KEY'] %> 

3.0在你的控制器,你會測試爲真;但是再一次強制饋送這樣的私鑰:

if (verify_recaptcha :private_key => ENV['RECAPTCHA_PRIVATE_KEY']) 
    ... your success code here 
    else 
    ... your fail code here 
    end 

4.0在表單中放置標籤很重要。 Devise文檔提到了這個寶石,並提供了使用此寶石的實際示例代碼http://github.com/plataformatec/devise/wiki/How-To:-Use-Recaptcha-with-Devise 他們說要將recaptcha_tags放在提交按鈕代碼的正上方。這個很重要。我不得不把它內:

<div class="form-actions"> 

...與按鈕

其他消息來源報道,圍繞HTML可以打破的東西以神祕的方式,所以你可能需要一段時間實驗沿(希望你不要沒有截止日期,或任何其他)。這些「安置」問題是我收到的「無效請求cookie」錯誤的罪魁禍首。

我希望這些指南能夠縮短您的開發時間。

+0

注意:使用Rails 3.0處理較舊的舊版應用程序。用不同版本的Gem進行實驗,因爲沒有表格/引用說明哪些版本的gem可以使用哪種版本的rails - 你只能猜測。無論如何,Gemfile中的這一行做到了這一點:_ gem'recaptcha','0.3.4',:require =>'recaptcha/rails' – JosephK