Ruby on rails rails 4中的Twilio身份验证失败

Ruby on rails rails 4中的Twilio身份验证失败,ruby-on-rails,twilio,Ruby On Rails,Twilio,我有一个方法来验证我的电话来自Twilio。这是我不久前在网上找到的各种例子的剪贴。我得到以下信息 Filter chain halted as :authenticate_twilio_request rendered or redirected Completed 401 Unauthorized in 4ms (Views: 1.0ms | ActiveRecord: 0.0ms) 嗯。验证失败了。当我第一次开始玩Twilio时,我在“概念验证”设计阶段使用了这种方法。当时它并没有失败(

我有一个方法来验证我的电话来自Twilio。这是我不久前在网上找到的各种例子的剪贴。我得到以下信息

Filter chain halted as :authenticate_twilio_request rendered or redirected
Completed 401 Unauthorized in 4ms (Views: 1.0ms | ActiveRecord: 0.0ms)
嗯。验证失败了。当我第一次开始玩Twilio时,我在“概念验证”设计阶段使用了这种方法。当时它并没有失败(尽管我也不知道它是否有效)。现在我已经完成了我的手机控制器,我刚刚把它加了回去

  def authenticate_twilio_request
    logger.debug '+ authenticate_twilio_request()' if COMMS_DEBUG
    twilio_signature = request.headers['HTTP_X_TWILIO_SIGNATURE']
    @validator = Twilio::Util::RequestValidator.new(
      Rails.application.secrets.twilio_token
    )
    # the POST variables attached to the request (eg "From", "To")
    # Twilio requests only accept lowercase letters. So scrub here:
    post_vars = params.reject {|k, v| k.downcase == k}

    logger.debug '* post_vars = ' + post_vars.to_s if COMMS_DEBUG
    logger.debug '* request.url = ' + request.url if COMMS_DEBUG
    logger.debug '* twilio_signature = ' + twilio_signature if COMMS_DEBUG

    is_twilio_req = @validator.validate(
      request.url, post_vars, twilio_signature
    )
    unless is_twilio_req
      render :xml => (Twilio::TwiML::Response.new {|r| r.Hangup}).text,
        :status => :unauthorized
      false
    end
  end
我用
logger.debug
打印的
request.url
,似乎在url后面附加了额外的数据。请看下面

* request.url = https://????????.ngrok.io/questions/1788?Called=%2B61294768366&ToState=Sydney&CallerCountry=AU&Direction=outbound-api&CallerState=Parramatta&ToZip=&CallSi
d=CA5e94751c4a7f9080ebcb8b78f71afe58&To=%2B61294768366&CallerZip=&ToCountry=AU&ApiVersion=2010-04-01&CalledZip=&CalledCity=&CallStatus=in-progress&From=%2B61288800922&Acc
ountSid=AC08bce5d0e2986f06e6105695caa83fcd&CalledCountry=AU&CallerCity=&Caller=%2B61288800922&FromCountry=AU&ToCity=&FromCity=&CalledState=Sydney&FromZip=&FromState=Parra
matta

另一个
logger.debug
数据显示正确。这就是问题所在吗?如果是,我如何修复它?如果没有,有什么问题吗?

这里是Twilio开发者福音传道者(是的,我最终发现了这个!)

实际上,我可以建议不必编写此代码。不久前我写了一封信

要使用Rails实现这一点,只需将中间件添加到Rails配置中:

Rails.application.configure do
  # Other Rails config

  config.middleware.use Rack::TwilioWebhookAuthentication, Rails.application.secrets.twilio_token, '/messages'
end
最后一个参数是要验证的来自Twilio的路径或路径列表。您可以传递字符串或regexp


试一试,让我知道它是否有效。

一定有人知道这一点。我的Twilio福音传道者在哪?谢谢Phil-根据你的链接用卷发测试。