【问题标题】:Why ngrok send me a 403 Forbidden为什么 ngrok 向我发送 403 Forbidden
【发布时间】:2020-04-12 05:08:27
【问题描述】:

我尝试使用 webhook 来获取 JSON, 我读到我应该安装ngrok,因为webhooks在本地不起作用,所以我安装了ngrok, 并尝试关注这个小教程:https://medium.com/@derek_dyer/rails-webhooks-local-development-7b7c755d85e3

我创建了我的路线:

get 'invoice/webhooks'
post 'invoice/webhooks' =>'invoice#webhooks'

还有我的控制器:

def webhooks
   render json: response.body, status: 200
end

我还在我的服务中插入了我的 URL:https://ce0d99f7.ngrok.io/invoice/webhooks 以接收 webhook

我在终端中运行 ./ngrok http 3000 并收到一条消息

POST /invoice/webhooks         403 Forbidden

有人知道怎么解决吗?

【问题讨论】:

  • 您提到的“消息”来自 ngrok 的输出,对吧?我会说它按预期工作 - 只是将请求转发到应用服务器。我会检查应用服务器错误日志/控制台输出以获取有关错误的更多上下文...
  • 感谢您的回答!是的,消息来自我启动 ngrok 的控制台!
  • 在 before_action 回调中控制器上是否有任何类型的身份验证?
  • 没什么,我做了一些修改,现在我有一个用于 POST /invoice/webhooks 的 422 Unprocessable Entity
  • 在我的控制器中添加了 skip_before_action :verify_authenticity_token 解决了这个问题,我现在在我的 POST /invoice/webhooks 上有 200 OK

标签: ruby ruby-on-rails-3 webhooks ngrok


【解决方案1】:

如果您使用 rails 6 并在开发中使用 ngrok,则必须编辑 config/environments 中的 development.rb 文件以添加 config.hosts << "a0000000.ngrok.io" 其中 a0000000.ngrok.io 是 ngrok 提供的 url 没有 https:// ,如果这没有工作,所以你必须在你的控制器中添加skip_before_action :verify_authenticity_token

【讨论】:

    【解决方案2】:

    @daniel0318 的回答完全正确。我只是想提一下,您可以使用this regular expression 来允许所有流量通过ngrok(添加到development.rb):

    # /config/environments/development.rb
    
    config.hosts << /[a-z0-9-]+\.ngrok\.io/
    

    重新启动您的服务器,它就会工作。

    最后一点:如果您认为您已经有了这个正则表达式,请仔细查看,因为 ngrok URL 格式在过去几个月中发生了变化,现在包含- 字符。 Tl;博士,config.hosts &lt;&lt; /[a-z0-9-]+\.ngrok\.io/ 有效,但旧的正则表达式:config.hosts &lt;&lt; /[a-z0-9]+\.ngrok\.io/(相同但不允许破折号)不起作用!

    【讨论】:

      猜你喜欢
      • 2013-08-21
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 2017-05-15
      • 1970-01-01
      相关资源
      最近更新 更多