J'ai un site Web construit avec des rails3 et maintenant, je souhaite mettre en œuvre une API JSON pour un accès client mobile. Cependant, envoyez une demande de message JSON auprès du client en raison du filtre Protect_From_Forgery. Parce que le client ne récupérera aucune donnée du serveur, il n'ya aucun moyen que le client puisse recevoir Auth_Token, donc je voudrais désactiver l'option protège_from_forgery uniquement pour les demandes JSON (je pensais que Rails3 le fait en défaut mais apparemment pas) .
Je sais que le sujet similaire est discuté à ici mais dans ce cas , il reçoit Auth_Token avant d'envoyer une demande postale. P>
Donc, ma question éteint le protège_from_forgery uniquement pour JSON est un bon moyen de faire cela? Si oui, comment le faire? Si non, quelle est l'alternative? P>
FYI, j'utilise après Ajax Demande P>
curl -H "Content-Type: application/json" -c cookies.txt -d '{"email": emailVal, "password": passwordVal}' -X POST http://www.example.com/login.json -i
3 Réponses :
Au lieu de désactiver le chèque CSRF, vous pouvez transmettre le champ Authenticity_Token dans vos formulaires, par exemple:
Cela pourrait ne pas être possible, si l'interface utilisateur est construite dans un projet différent entièrement
Vous pouvez simplement ignorer le chèque de jeton authenticité si sa demande JSON
class ApplicationController < ActionController::Base skip_before_filter :verify_authenticity_token, if: :json_request? def json_request? request.format.json? end end
Notez que cela le rend vulnérable à la CSRF.
Utilisez skip_before_action code> sur rails 5+.
Ajoutez le code ci-dessous à votre ./ app / contrôleurs / application_controller.rb code>: