【问题标题】:Rails 4 - Endpoint for an API CallbackRails 4 - API 回调的端点
【发布时间】:2014-06-26 11:43:35
【问题描述】:

我最近从 Rails 3.2 升级到 Rails 4,现在我的应用程序端点之一出现问题。

我正在尝试让外部服务 (Hellosign) 在用户执行操作后将一些 JSON 发布到我的应用程序。为此,我的端点必须返回一个 200 HTTP 代码和一个包含以下文本的响应正文:“Hello API Event Received”

这在 Rails 3.2 中运行良好,但我在 Rails 4 中遇到了麻烦。我会在 config/routes.rb 中为此设置路由

post 'document' => 'requests#document'

我的用户模型包括has_many :requests,我的请求模型包括belongs_to :account。我正在使用最新版本的 Devise。

Requests Controller 的精简版如下:

class RequestsController < ApplicationController
  before_filter :authenticate_user!, except: [:document]
  skip_before_action :verify_authenticity_token, :only => [:document]

  def document
    render text: "Hello API Event Received"
    @json = JSON.parse(params["json"])
  end
end

我跳过设计身份验证并验证 document 操作的真实性令牌,以便它可以实际接收来自 API 的 POST,该 API 具有自己的身份验证协议。

问题:我从 API 收到回调失败的消息,并出现“访问被拒绝”错误。当我在 Heroku 中检查生产日志时,我收到了 ERROR invalid body size 错误消息。

我最好的猜测是 Rails 4 中的 Devise 发生了一些变化,我不能再使用 before_filterskip_before_action 位来允许 document 操作作为面向公众的端点。

任何帮助将不胜感激!

【问题讨论】:

  • 在呈现响应后解析 json 很奇怪。这是故意的吗?
  • 您是否尝试自己发布到该端点?
  • 好吧,我想我需要在解析数据之前传递收到事件的消息。它在 Rails 3.2 版本中工作。我确实尝试过自己通过 Net::HTTP 发送帖子;我收到了500 Internal Server Error
  • Devise 跟它有什么关系?如果您仅将其用于公共端点,为什么需要使用 Devise 进行身份验证?你为什么不这样使用skip_before_filterskip_before_filter :authenticate_user!, :only =&gt; :documents
  • 嗨,丰富。这是一个精简的控制器,不显示需要用户身份验证的其他操作。我的想法是,我没有以 Rails 4 可接受的方式从 Devise 身份验证中排除 document 操作。根据设计文档,您应该指定before_action :authenticate_user!,所以我相信我需要这样做,然后除了document 操作,对吧?

标签: ruby-on-rails heroku ruby-on-rails-4 devise endpoint


【解决方案1】:

Grrrr,我发现了问题。我为 API 指定的端点使用了http 而不是https。在向 HelloSign API 提供 https 后,现在一切正常。但是,即使在我的应用程序中添加了 SSL 之后,我提供的端点(http)也可以与 Rails 3.2 一起使用……Rails 4 升级中的什么导致此失败?以及如何理解“ERROR invalid body size”消息?无论如何,感谢所有提供建议的人!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多