【问题标题】:Rails: Disable CSRF for a 3rd party POST RequestRails:为第 3 方 POST 请求禁用 CSRF
【发布时间】:2012-08-09 10:58:32
【问题描述】:

我有一个 Rails 3.2 应用程序,我需要在其中接受来自第 3 方的 POST 请求。 我想将传入的请求存储在我的“消息”模型中。 我的 MessageController 如下所示:

class MessagesController < ApplicationController
  protect_from_forgery :except => :create
...

def create
@message = Message.new(content: params[:content], command: params[:command], messageId: params[:messageId], ...)

respond_to do |format|
  if @message.save
...

我收到的请求如下所示:

curl -d "content=GUESTTEST&command=deliverMessage&messageId=11389622" https://[myapp].herokuapp.com/messages

这在本地运行良好(http://localhost:3000/messages),但是一旦我切换到 heroku,请求就不再起作用了。

heroku logs

说:

    2012-08-13T07:54:01+00:00 app[web.1]: Started POST "/" for 178.195.215.59 at 2012-08-13 07:54:01 +0000
    2012-08-13T07:54:01+00:00 app[web.1]: Processing by StaticPagesController#home as */*
    2012-08-13T07:54:01+00:00 app[web.1]:   Parameters: {"content"=>"GUESTTEST", "time"=>"2012-08-01 10:09:03", "businessNumber"=>"5555", "sessionId"=>"5555CHS1343808543654", "operatorCode"=>"99999", "msisdn"=>"0099955291", "keyword"=>"GUESTTEST", "command"=>"deliverMessage", "messageId"=>"11389622"}
    2012-08-13T07:54:01+00:00 app[web.1]: WARNING: Can't verify CSRF token authenticity
    2012-08-13T07:54:01+00:00 app[web.1]:   Rendered static_pages/home.html.erb within layouts/application (1.1ms)
    2012-08-13T07:54:01+00:00 app[web.1]:   Rendered layouts/_shim.html.erb (0.0ms)
    2012-08-13T07:54:01+00:00 app[web.1]:   Rendered layouts/_header.html.erb (0.9ms)
    2012-08-13T07:54:01+00:00 app[web.1]:   Rendered layouts/_footer.html.erb (0.2ms)
    2012-08-13T07:54:01+00:00 app[web.1]: Completed 200 OK in 6ms (Views: 5.6ms | ActiveRecord: 0.0ms)
    2012-08-13T07:54:01+00:00 heroku[router]: POST guestlist12.herokuapp.com/ dyno=web.1 queue=0 wait=0ms service=72ms status=200 bytes=2425

我需要进行哪些更改才能让帖子在没有 CSRF 令牌的情况下工作?

非常感谢任何帮助!

【问题讨论】:

  • 应用控制器中是否还有protect_from_forgery?
  • 是的,我应该修改它吗?如果我从应用程序控制器中删除它,我必须将它添加到其他每个控制器,对吧?
  • 我已经尝试过了,并在应用程序控制器中禁用了它,但它并没有解决问题。还有其他想法吗?
  • 确实如此,问题出在其他地方。感谢您的帮助!
  • @AmolPujari - 如果您想将解决方案概括为您自己的答案,我将删除我的答案。 (请参阅meta.stackexchange.com/questions/90263/… 详细说明为什么这会有所帮助。)谢谢!

标签: ruby-on-rails heroku csrf http-post


【解决方案1】:

总结来自 cmets 的答案,以便从“未回答”过滤器中删除此问题:

[从]应用程序控制器中[删除]protect_from_forgery。

~回答Amol Pujari

【讨论】:

    猜你喜欢
    • 2013-08-01
    • 1970-01-01
    • 2019-01-17
    • 2016-06-15
    • 2021-09-26
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    相关资源
    最近更新 更多