我想授予用户从其网站访问我的API(在heroku.com上托管)的权限。 但是当我希望它们允许发布到api时会出现一个奇怪的问题:
使用正确的action-url从正确的表单发送数据(例如“http://myapp.com/projects/123/tasks/321/todos”) - params被序列化并通过jQuery发送 - 我遇到了“ActionController :: MethodNotAllowed”带有附加信息:“只允许get和post请求”,使用:method =>重新路由到ApplicationController #index。 :选项
Rails不会从url中提取project_id(123)和task_id(321)的参数,也没有任何其他request_parameters,path_parameters或query_parameters可用。
当我从本地计算机上的html页面发布时,从外部站点POST但不会发生此行为。我的第一个想法是错误的编码,但如何解决这个问题。
编辑: 我正在使用authlogic(不是设计:-D),对于:create动作,已经跳过了protect_from_forgery。
任何建议赞赏
答案 0 :(得分:0)
我想这是因为rails试图保护你的表单CSRF攻击。
你可以在ApplicationController中注释掉protect_from_forgery
行来测试它。
但我不确定这是否是在生产环境中处理此问题的正确方法。
答案 1 :(得分:0)
好。我这次会尝试回答正确的问题(见其他评论)。
所以我考虑过这个,我想知道,这是一个jQuery调用尝试PUT请求的情况吗?当您使用本地表单时,Rails将POST数据,但添加额外的_method
字段以模拟PUT。
不知道您是否使用jquery-rails,但这需要在AJAX调用中为您设置_method参数和PUT / POST动词翻译。
答案 2 :(得分:0)
由于跨域策略而发生问题 - 请求来自另一个域 - 并且因为我使用的是最近支持CORS的浏览器,所以它首先发送了一个OPTIONS请求,以便从服务器,该域允许哪些操作。