ruby-on-rails - Rails 3 和 Twilio 进行电话验证

标签 ruby-on-rails ruby-on-rails-3 twilio verification phone-call

我正在 Rails 3 中构建一个应用程序,使用 twilio 来验证企业的存在。基本上,当您创建一个新业务时,我会随机生成一个 6 位数字,然后使用此验证码调用业务电话号码,用户需要将其输入回系统中才能完成注册过程。我很难找到有关如何进行此设置的任何相关示例。我找到了 this ,但它似乎已经过时了,并且似乎不适用于 Rails 3。 twilio-rb gem 的文档也令人困惑。

有谁知道任何示例或有任何代码示例可以为我指明正确的方向?

最佳答案

正如我在对您的问题本身的评论中所说,我是您提到的 twilio-rb gem 的作者。在我的脑海中,我会实现一个验证资源,你可以在其中发布电话号码。

POST /verifications.voice { telephone_number: '+12125551234' }

在创建操作中使用 Twilio::Call.create使用 Twilio 创建新调用
def create
  @verification = Verification.new params[:verification]

  if @verification.save
    Twilio::Call.create to: @verification.telephone_number, 
      from: YOUR_CALLER_ID, url: verification_url(@verification, format: :voice)
    # 201 created and return verification code etc
  else
    # Handle errors
  end
end 

您还需要挽救 twilio-rb 可能引发的任何 API 错误。 url 指的是验证资源实例的显示 Action 。然后,Twilio 将调用提供的电话号码,并在调用连接时请求 url,例如GET /verifications/1.voice所以你需要一个显示 View 来询问验证码并使用 <Gather> verb 收集数字:
res.gather num_digits: 4, action: twilio_hack_verification_url(@verification, :format => :voice), method: 'POST' do |form|
  form.say 'Please enter the your 4 digit verification code'
end

由于 Twilio 当前未实现 PUT 动词,因此您将向资源添加成员
resources :verifications do
  member { post 'twilio_hack' }
end

然后在您的 Controller 中使用用户输入更新对象:
def twilio_hack
  @verification = Verification.find(params[:id]).tap do |v|
    v.user_input params['Digits']
    v.save
  end

  if @verification.confirmed?
    # handle success
  else
    # handle failure
  end

end

最后,在您的模型中,您需要生成验证码并验证是否已确认的代码
class Verification < ActiveRecord::Base
  before_save   -> { self[:confirmed] = true if user_input == verification_code }, if: user_input
  before_create -> { self[:verification_code] = rand.to_s[2..5] }
end

这一切都未经测试,我想了大约 2 分钟就想不通了,但它应该能让你开始。

关于ruby-on-rails - Rails 3 和 Twilio 进行电话验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5725752/

相关文章:

javascript - 在 Ruby on Rails 中,如何使 HTML 作为一个文件中的部分内容和另一个文件中的 Javascript 最后包含?

ruby-on-rails - 如何将公共(public)代码移至一个由其他引擎共享的 Rails 引擎?

ruby-on-rails-3 - 我需要直接在 Devise 下的控制台中对用户进行身份验证。我该怎么做?

twilio - 是否可以在 Twilio Studio 中连接流?

django - 使用 Django 和 Twilio 通过 SMS 进行一次性用户身份验证

ruby-on-rails - 找不到 Rails 测试表

ruby-on-rails - Rails 3.1 可安装引擎 : Assets (Images) not copied to the host application?

ruby - Rails PostgreSQL 使用 LIKE 进行不区分大小写的搜索

ios - 我们可以使用 VOIP 推送为 twilio 客户端处理来电吗?

html - rails 4 : unable to import bootstrap theme into rails