You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby on Rails中.slim文件集成Google ReCaptcha报错及示例代码求助

解决recaptcha_tags未定义错误的完整集成示例

1. 基础依赖配置

首先确保安装并配置reCAPTCHA的Ruby gem:

  • 在Gemfile中添加:
    gem 'recaptcha', require: 'recaptcha/rails'
    
  • 执行bundle install安装依赖
  • 在config/initializers/recaptcha.rb中配置密钥(从Google reCAPTCHA控制台获取):
    Recaptcha.configure do |config|
      config.site_key  = Rails.application.credentials.recaptcha[:site_key]
      config.secret_key = Rails.application.credentials.recaptcha[:secret_key]
    end
    
    也可以直接用环境变量替代credentials,比如ENV['RECAPTCHA_SITE_KEY']和ENV['RECAPTCHA_SECRET_KEY']

2. 注册页面Slim代码(app/views/users/new.html.slim)

h1 注册新用户
= form_with model: @user, url: users_path do |form|
  - if @user.errors.any?
    .alert.alert-danger
      ul
        - @user.errors.full_messages.each do |msg|
          li= msg

  .form-group
    = form.label :email
    = form.email_field :email, class: 'form-control', required: true

  .form-group
    = form.label :password
    = form.password_field :password, class: 'form-control', required: true

  .form-group
    = form.label :password_confirmation
    = form.password_field :password_confirmation, class: 'form-control', required: true

  # 加入reCAPTCHA验证组件
  .form-group
    = recaptcha_tags
    - if flash[:recaptcha_error]
      .text-danger= flash[:recaptcha_error]

  .form-group
    = form.submit '注册', class: 'btn btn-primary'

3. 用户控制器代码(app/controllers/users_controller.rb)

class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)

    # 验证reCAPTCHA
    unless verify_recaptcha(model: @user, message: '请完成验证码验证')
      flash[:recaptcha_error] = '验证码验证失败,请重试'
      render :new
      return
    end

    if @user.save
      redirect_to root_path, notice: '注册成功'
    else
      render :new
    end
  end

  private

  def user_params
    params.require(:user).permit(:email, :password, :password_confirmation)
  end
end

补充说明

  • 如果使用reCAPTCHA v3,需要调整标签为recaptcha_v3_tags,并在控制器中用verify_recaptcha(action: 'signup', minimum_score: 0.5)验证分数
  • 确保服务器环境能访问Google reCAPTCHA服务,本地开发如果有墙可能需要代理

内容的提问来源于stack exchange,提问作者x5ud0kn1gh7x

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:17:04