我需要使用谷歌reCAPTCHA v2 我已在localhost和https://www.google.com/recaptcha/admin上的heroku上注册了新密钥及其域名。 我在 Gemfile
中重新获取了gemgem 'recaptcha', require: 'recaptcha/rails'
在 .env 文件中,我添加了网站密钥和密钥:
RECAPTCHA_SITE_KEY=xxxxxxxxxxxxXXXXXXXxxxxxxxxXxxxxxxxxxxxx
RECAPTCHA_SECRET_KEY=xxxxxxxxxXXXxxxxxxXXXXxxxxxxXXxxXxxxxxxx
在 /config/initializers/recaptcha.rb 中,我有:
Recaptcha.configure do |config|
config.site_key = ENV['RECAPTCHA_SITE_KEY']
config.secret_key = ENV['RECAPTCHA_SECRET_KEY']
end
在我的Devise会话控制器控制器中,如果用户对sign_in进行了3次错误的电子邮件/密码修改,我使用recaptcha来验证用户Sign_in 我有 /app/controllers/users/sessions_controller.rb :
class Users::SessionsController < Devise::SessionsController
before_action :recaptcha_check, only: :create
def create
super
end
private
def recaptcha_check
cookies[:login_attempts] ||= 0
cookies[:login_attempts] = cookies[:login_attempts].to_i + 1
return unless cookies[:login_attempts].to_i > 3
unless verify_recaptcha
respond_to do |format|
format.html { redirect_back fallback_location: root_path }
format.js
end
end
end
end
第一次,当我尝试它时,没关系。 但是在第二天到现在它不起作用。 每次我在recaptcha check_box中都有绿色复选标记,然后点击Sign_in我得到:
reCAPTCHA验证失败,请重试。
我尝试更新密钥2或3次,但没有帮助。我也尝试在localhost和heroku上。请告诉我这个问题的原因以及解决方法。
更新1
正如razvans告诉我的那样,我尝试使用与gem文档相同的verify_recaptcha。我做了这样的事情:
def recaptcha_check
cookies[:login_attempts] ||= 0
cookies[:login_attempts] = cookies[:login_attempts].to_i + 1
return unless cookies[:login_attempts].to_i > 3
@user = User.new(email: params[:user][:email], password: params[:user][:password], password_confirmation: params[:user][:password])
unless verify_recaptcha(model: @user)
respond_to do |format|
format.html { redirect_back fallback_location: root_path }
format.js
end
end
end
但这只是删除了错误消息。我认为这是因为在verify_recaptcha选项:model Model to set errors
中,它只是不显示错误消息。但是verify_recaptcha仍未通过。
另外正如我所说,我使用Devise来验证用户身份。我在这里找到https://github.com/plataformatec/devise/wiki/how-to:-use-recaptcha-with-devise设计重新设计的解决方案,但它几乎和我的代码一样。所以我仍然有这个问题请求帮助。