Comment désactiver les rails protect_from_forgery filtre uniquement pour json
J'ai site web construit avec Rails3 et maintenant, je veux mettre en œuvre des API json pour mobile d'accès au client. Toutefois, l'envoi du json requête post par le client en raison de l'protect_from_forgery filtre. Parce que le client ne va pas récupérer des données à partir du serveur, il n'y a aucun moyen que le client peut recevoir auth_token donc je voudrais désactiver le protect_from_forgery option uniquement pour json demandes (je pensais rails3 ne présente par défaut, mais apparemment il ne fonctionne pas).
Je sais même sujet est abordé à la ici mais dans ce cas, il reçoit auth_token avant d'envoyer une requête post.
Donc ma question est la désactivation de la protect_from_forgery seulement pour le json est une bonne façon de le faire? Si oui, comment faire? Si non, quelle est l'alternative?
Pour info, j'ai la suite de la requête ajax
$.ajax({
type: 'POST',
url: "http://www.example.com/login.json",
data: { 'email': emailVal, 'password': passwordVal },
success: onSuccess,
error: onError,
dataType: "json"
});
et je reçois ActionController::InvalidAuthenticityToken erreur.
Par la façon dont, à la suite de commande curl fonctionne bien...
curl-H "Content-Type: application/json" -c cookies.txt -d '{"email": emailVal, "mot de passe": passwordVal}' -X POST http://www.example.com/login.json -je
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à ce post: http://zadasnotes.blogspot.com/2010/11/rails-3-forgery-csrf-protection-for.html
Mise à jour
L'article a été supprimé depuis lors, j'ai donc fait une recherche rapide et j'ai trouvé l'auteur original de la publication d'un article sur la question de la SORTE.
Rails 3, la requête AJAX authenticité jeton ignoré
Vous pouvez simplement ignorer l'authenticité jeton de vérifier si son format json demande
skip_before_action
sur Rails 5+.Au lieu de désactiver la CSRF vérifiez que vous pouvez passer le authenticity_token champ dans vos formulaires, par exemple:
http://apidock.com/rails/v2.0.0/ActionController/RequestForgeryProtection/ClassMethods/protect_from_forgery
Ajoutez le code ci-dessous pour votre
./app/controllers/application_controller.rb
: