我正在使用Rails 5.0.3应用程序(使用Ruby 2.4.1)并尝试在我的网站上的联系我们表单中安装Recaptcha v2功能。
我收到以下错误: -
/config/initializers/recaptcha.rb:1:in `<top (required)>': uninitialized constant Recaptcha (NameError)
from /home/[$user]/.rvm/gems/ruby-2.4.1/gems/railties-5.0.3/lib/rails/engine.rb:648:in `block in load_config_initializer'
为了实现这个功能,我遵循了recaptcha gem的文档https://github.com/ambethia/recaptcha
在我的gemfile中,我有: -
gem 'dotenv-rails', require: 'dotenv/rails-now'
gem 'recaptcha', require: 'recaptcha/rails'
在我的.env文件中(位于根文件夹中)我有: -
RECAPTCHA_SITE_KEY= xxxxxxxxxxxxxxxxxxxxxxxxxx
RECAPTCHA_SECRET_KEY= xxxxxxxxxxxxxxxxxxxxxxxxx
我在config / initializers / recaptcha.rb中有这个: -
Recaptcha.configure do |config|
config.site_key = ENV['RECAPTCHA_SITE_KEY']
config.secret_key = ENV['RECAPTCHA_SECRET_KEY']
end
在视图中我有: -
.
.
.
<%= f.label :content %>
<%= f.text_area :content, class: 'form-control' %>
<br>
<%= recaptcha_tags %>
<br>
<div class="actions">
<%= f.submit "Send", class: "btn btn-primary center-block" %>
</div>
<% end %>
.
.
.
在我的控制器中,我有: -
def create
@message = Message.new(message_params)
if !verify_recaptcha(model: @message) && @message.valid?
.
.
.
从错误中我可以看出,初始化程序没有加载。我不是初始化器的专家,所以我不知道它们是如何加载的,或者我需要做些什么才能让它们加载。
答案 0 :(得分:2)
但你不需要宝石。 你像这样渲染recaptcha 1)导入Google脚本
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
2)在你感兴趣的形式中放入一个具有适当类的div
<form action="?" method="POST">
<div class="g-recaptcha" data-sitekey="
<%=Rails.secrets.recaptcha_key%>"></div>
<br/>
<input type="submit" value="Submit">
</form>
然后在你的控制器中验证,只需发一个帖子请求
if valid_captcha?(params['g-recaptcha-response']) && @user.save
其中
def valid_captcha?(recaptcha_response)
return true if Rails.env.test?
HTTParty.post(
Rails.application.secrets.recaptcha_url,
body: {
secret: Rails.application.secrets.recaptcha_secret_key,
response: recaptcha_response
})["success"]
end