代码之家  ›  专栏  ›  技术社区  ›  ernd enson

Rails Post不提取任何路径、查询或请求参数

  •  1
  • ernd enson  · 技术社区  · 15 年前

    我想允许用户从他们的网站访问我的API(托管在heroku.com上)。 但当我希望他们允许发布到API时,会出现一个奇怪的问题:

    从具有正确操作URL的正确表单发送的数据(例如“http://myapp.com/projects/123/tasks/321/todos”)-这些参数将被序列化并通过jquery发送-我遇到一个“actioncontroller::methodNotallowed”,其中包含附加信息:“只允许get和post请求”,重新路由到applicationcontroller index with:method=>:选项。

    Rails不会从URL中提取项目ID(123)和任务ID(321)的参数,也不会有任何进一步的请求参数、路径参数或查询参数可用。

    当我从外部站点发帖时,这种行为会发生,但当我从本地机器上的HTML页面发帖时,不会发生。我第一个想到的是错误的编码,但是如何解决这个问题。

    编辑: 我使用的是AuthLogic(而不是Design:-d),对于:创建操作,已经跳过了保护\免受伪造的操作。

    有什么建议吗

    3 回复  |  直到 12 年前
        1
  •  0
  •   antpaw    15 年前

    我想这是因为Rails试图保护你免受CSRF攻击。

    你可以评论一下 protect_from_forgery 在ApplicationController中输入行进行测试。

    但我不确定这是否是在生产环境中处理这个问题的正确方法。

        2
  •  0
  •   Scott    15 年前

    可以。这次我将尝试回答正确的问题(见其他评论)。

    所以我考虑过这个问题,我想知道,这是jquery调用尝试Put请求的情况吗?当您使用本地窗体时,Rails将发布数据,但添加额外的 _method 要模拟Put的字段。

    不知道你是否在使用 jquery-rails 但是,这要考虑在Ajax调用中为您设置\方法参数和put/post动词翻译。

        3
  •  0
  •   ernd enson    12 年前

    出现问题的原因是跨域策略-请求来自另一个域-并且因为我使用的是最近支持的浏览器 CORS ,它首先发送了一个选项请求,以便从服务器了解此域允许哪些操作。