为啥 ngrok 向我发送 403 Forbidden
Posted
技术标签:
【中文标题】为啥 ngrok 向我发送 403 Forbidden【英文标题】: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 【参考方案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 << /[a-z0-9-]+\.ngrok\.io/
有效,但旧的正则表达式:config.hosts << /[a-z0-9]+\.ngrok\.io/
(相同但不允许破折号)不起作用!
【讨论】:
以上是关于为啥 ngrok 向我发送 403 Forbidden的主要内容,如果未能解决你的问题,请参考以下文章
为啥 spring-saml-extension 和 adfs 2.0 返回 403 错误?
在 centOS 上运行 phpmyadmin - 禁止错误 (403)