8

我正在使用 PaypalAdaptive。它正确发送 ipn_notification。ipnNotification 操作方法如下 -

def ipn_notification
    ipn = PaypalAdaptive::IpnNotification.new
    ipn.send_back(request.raw_post.to_json)

    print "=====================request.raw_post#{request.raw_post}=============="

    if ipn.verified?
        PaymentMailer.notify_unknown(request.raw_post).deliver
    else
        logger.info "IT DIDNT WORK"
    end
    render :nothing => true
end

但它返回错误

WARNING: Can't verify CSRF token authenticity rails

对这个问题有任何帮助。

4

3 回答 3

19

在您的控制器中:

skip_before_filter :verify_authenticity_token, :only => [:ipn_notification]

对于快速阅读并分发 -1 的人(跳过一个重要部分:这不是来自客户端的 POST 调用......):

  • 是的,它跳过了安全性,但是……阅读后……

  • 是的,这是外部网站 POST 请求的唯一方式

  • 是的,这很安全:当您接到 Paypal 或类似的电话时,您显然会检查参数和密钥。

于 2012-08-16T12:44:46.373 回答
15

在不影响安全性的情况下解决此问题的正确方法

在您的 ajax 请求中,将 csrf 令牌值作为标头发送。

var csrfToken = $("meta[name='csrf-token']").attr("content");
$.ajaxSetup({
  headers: {
    'X-CSRF-Token': csrfToken
  }
});
于 2013-03-09T21:57:49.787 回答
4

在 application.js 中添加以下行

//= require jquery_ujs

并尝试。

于 2013-12-25T13:45:51.183 回答