为什么 ngrok 给我一个 403 Forbidden

Why ngrok send me a 403 Forbidden

我尝试使用 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

有人知道如何解决这个问题吗?

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

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

# /config/environments/development.rb

config.hosts << /[a-z0-9-]+\.ngrok\.io/

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

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