2012-08-16 10 views
8

PaypalAdaptiveを使用しています。 ipn_notificationを正しく送信します。 ipnNotificationアクションメソッドは、以下の通りである -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

+0

ありがとうございます。 – vajapravin

+0

-1が説明されている方が良いです – apneadiving

12

あなたのAjaxリクエストでは、セキュリティ

を損なうことなく、この問題の正しい解決策は、ヘッダーとしてCSRFトークン値を送信します。

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

これははるかに良いアプローチです.... – Magnum

+1

@Magnumより良いアプローチ?たぶん、悲しいかな、それは質問に答えることはありません - 1時間前の無礼 – apneadiving

+0

それは私が「より良いアプローチ」ではなく、 – Magnum

4

//= require jquery_ujs 

あなたのapplication.jsに次の行を追加してみてください。