2012-08-16 33 views
8

Estoy usando PaypalAdaptive. Envía ipn_notification correctamente. ipnNotification método de acción es el siguiente -No se puede verificar la autenticidad del token de CSRF en los rieles

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 

pero se está volviendo error

WARNING: Can't verify CSRF token authenticity rails 

Cualquier ayuda para este problema.

Respuesta

18

En su controlador:

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

Para la gente que lee de forma rápida y distribuir -1 (se pierden una parte importante: no es una llamada de POST desde el cliente ...):

  • sí se saltea una seguridad PERO ... Leer después de ...

  • sí, es la única forma de solicitud POST de sitios web externos

  • sí, es seguro: obviamente, verifica parámetros y claves cuando recibes una llamada de Paypal o similar.

+0

¿no es la respuesta? – apneadiving

+0

está funcionando gracias. – vajapravin

+0

-1 son mejores cuando se explican – apneadiving

12

La solución correcta para este problema sin comprometer la seguridad

En su petición ajax enviar el valor del token CSRF como cabecera.

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

Este es un enfoque mucho mejor ... – Magnum

+1

@Magnum mejor enfoque? Tal vez, por desgracia, no responda la pregunta - apneadiving hace 1 hora – apneadiving

+0

Es por eso que dije que es 'mejor enfoque' no 'respuesta' – Magnum

4

Añadir la siguiente línea en su application.js

//= require jquery_ujs 

y probar.

Cuestiones relacionadas