2012-08-16 4 views
8

Ich benutze PaypalAdaptive. Es sendet ipn_notification richtig. ipnNotification Aktionsmethode ist, wie folgend -Kann CSRF-Token-Authentizität in Schienen nicht überprüfen

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 

aber es Fehler für dieses Problem

WARNING: Can't verify CSRF token authenticity rails 

Jede Hilfe zurück.

Antwort

18

In Ihrem Controller:

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

Zum Lesen Menschen zu schnell und verteilen -1 (einen wichtigen Teils Überspringen: es ist kein POST Aufruf vom Client ...):

  • ja es überspringt eine Sicherheit aber ... Lesen Sie nach ...

  • ja, es ist die einzige Möglichkeit für externe Website POST Anfragen

  • Ja, es ist sicher: Sie überprüfen natürlich Params und Schlüssel, wenn Sie einen Anruf von Paypal oder ähnlichem erhalten.

+0

antwortet es nicht? – apneadiving

+0

es funktioniert dank. – vajapravin

+0

-1 sind besser, wenn erklärt – apneadiving

12

Die richtige Lösung für dieses Problem ohne die Sicherheit zu gefährden

In Ihrem Ajax-Request als Header den csrf Tokenwert senden.

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

Dies ist viel besser Ansatz .... – Magnum

+1

@Magnum besseren Ansatz? Vielleicht, ach, es beantwortet die Frage nicht - apneadiving vor 1 Stunde – apneadiving

+0

Deshalb habe ich gesagt, es ist 'besserer Ansatz', nicht 'Antwort' – Magnum

4

die folgende Zeile in Ihrem application.js hinzufügen

//= require jquery_ujs 

Und versuchen.