2012-08-16 60 views
8

我正在使用PaypalAdaptive。它正確發送ipn_notification。 ipnNotification操作方法如下 -無法在rails中驗證CSRF令牌的真實性

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 

對於這個問題的任何幫助。

回答

18

在你的控制器:

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

對於人們閱讀快速分發-1(跳過一個重要組成部分:它不是來自客戶端的POST調用...):

  • 是的,它跳過一個安全但是...讀後...

  • 是的,這是外部網站POST請求的唯一方式

  • 是的,它是安全的:你顯然檢查參數和鍵時收到來自PayPal的電話或類似。

+0

不是回答嗎? – apneadiving 2012-09-27 15:25:11

+0

它的工作表示感謝。 – vajapravin 2012-11-19 06:22:22

+0

-1在解釋時效果更好 – apneadiving 2013-03-21 06:56:45

12

這個問題的正確的解決方案不影響安全性

在您的Ajax請求發送CSRF令牌值作爲標題。

var csrfToken = $("meta[name='csrf-token']").attr("content"); 
$.ajaxSetup({ 
    headers: { 
    'X-CSRF-Token': csrfToken 
    } 
}); 
+1

這是更好的方法.... – Magnum 2013-08-21 09:08:19

+1

@Magnum更好的方法?也許,唉,它不回答這個問題 - apneadiving 1小時前 – apneadiving 2013-08-21 14:42:54

+0

這就是爲什麼我說這是'更好的方法'而不是'回答' – Magnum 2013-08-22 09:56:04

4

添加下面一行在你的application.js

//= require jquery_ujs 

和嘗試。

相關問題