-1

次のエラーが表示されます。

アプリケーションで予期しないエラーが発生しました。管理者に連絡してください。エラー コード: 成功

私はdeviseでrecaptchaを使用しています。このページに記載されている手順に従って、必要に応じて編集しました

これが私のものGemfileです:

source 'https://rubygems.org'

gem 'rails', '3.2.8'

gem 'json'
gem 'execjs'
gem 'therubyracer'
gem 'will_paginate', "3.0.pre4"

group :production do
  gem 'pg'
end

group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'
  gem 'uglifier', '>= 1.0.3'
  gem 'jquery-fileupload-rails'
  gem "letter_opener"
  gem 'jquery-ui-rails'
end

gem 'jquery-rails'
gem "carrierwave"
gem "fastercsv"
gem 'devise', '2.1.2'
gem 'rmagick'
gem 'mailman', :require=> false
gem 'activeadmin'
gem 'kaminari'
gem 'prawn'
gem 'recaptcha', :require => 'recaptcha/rails'
4

2 に答える 2

0

Recaptcha サイトから (ほぼ)...私は Devise (明らかにハード バンドル) を使用して Rails 4 を使用しています。いいえ、簡単すぎます。手順は、任意の ruby​​、任意のレール、およびデバイス (またはデバイスなし) に適用されます。ruby/rails/devise 1.9.3/3.2.x/2.2.1 および 2.0.x/4.0.x/3.2.4 でテスト済み、最後の 1 つは Devise なし。

次のファイルを編集します。

Gemfile

gem 'ruby-recaptcha'
# bundle install

config/initializers/credentials.rb (このパス内の任意のファイルで問題ありません)

# Set constants
RCC_PUB = "your_public_key"
RCC_PRIV= "your_private_key"
# re-start server. Try to keep safety this data using ENV vars.

app/views/devise/registrations/new.html.erb (またはお好みのフォーム)

# form
<%= simple_form_for(resource, as: resource_name, :url => registration_path(resource_name) do |f| %>
    <%= f.input :email, autofocus: true, required: true %>
    ...
    <!-- Add next line -->
    <div id="captchadiv"></div>
    <%= f.button :submit, "Register", class: 'btn btn-danger' %>
<% end %

同じファイルの最後 (awesome_funcs.js.erb ファイルにある可能性があります)

<script type="text/javascript" charset="utf-8">
$(function () {
    function showRecaptcha() {
        Recaptcha.create("<%= RCC_PUB %>", "captchadiv", {
            theme: "white",
            lang: 'en'
        });
    };
    showRecaptcha();
});
</script>

ちょっとしたトリック app/controllers/application_controller.rb

# On top
include ReCaptcha::AppHelper
before_action :configure_permitted_parameters, if: :devise_controller?
# If already you have this method or any other with before_filter

# Into method
protected
def configure_permitted_parameters
    if controller_name == "registrations" && action_name == "create"
    # Rails 3: If you prefer, put this into registrations#create method
        unless validate_recap(params, User.new.errors) # Or your model
            # wrong input is handled here
            flash[:error] = "Text from images doesn't match with your input"
            redirect_to :back # or other stuff
            # As my submit is with Ajax, I do a render instead redirect:
            # render :json => {other: "recaptcha_failed"}
            # In success callback I evaluate response and Recaptcha.reload() paints a new recaptcha.
        end
    end
    .... 
    # trick: do everything before params sanitizers
end

Ajax プラグインを使用しているため、最後に app/views/layouts/application.html.erb を追加します (本文の直前)。

<body>
    ...
    ...
    <script type="text/javascript" src="http://www.google.com/recaptcha/api/js/recaptcha_ajax.js"></script>
</body>

それでおしまい。再キャプチャがあります

アドバイス: Ajax を使用して送信する場合は、画像と入力が一致しない場合に Recaptcha.reload() の成功コールバックを使用できます。

その他、フォームが "remote: true" の場合、ビュー ディレクトリの create.js.erb ファイルで "create" メソッドの後に上記の動作を使用できます。

重要: 一部のプロジェクトでは、フォームがリンクから到着したときに Recaptcha が表示されません。ランチャー リンクを div に配置するか、親 div に「data-no-turbolink」を追加してください。Rails 4でこの問題が発生しました。

于 2014-04-21T13:04:25.633 に答える
0

ドキュメントに記載されているとおりに正確に従っていただければ幸いです。たとえば、ruby 1.8.X と 1.9.X で recaptcha をサポートするには、異なるコード行があります。ただし、簡単な調査の後、レールのバージョンに関係なく、このWebサイトをプラグインなしでrecaptchaを使用できることがわかりました。これが役立つことを願っています。:)

于 2013-01-15T12:05:44.343 に答える