8
votes

Comment éteindre les rails protégez_from_forgery Filtre uniquement pour JSON

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


0 commentaires

3 Réponses :


1
votes

Au lieu de désactiver le chèque CSRF, vous pouvez transmettre le champ Authenticity_Token dans vos formulaires, par exemple: xxx

http://apidock.com/rail/v2.0.0/actionController/requestforgeryProtection/classmethods/protect_from_forgery


1 commentaires

Cela pourrait ne pas être possible, si l'interface utilisateur est construite dans un projet différent entièrement



16
votes

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


2 commentaires

Notez que cela le rend vulnérable à la CSRF.


Utilisez skip_before_action sur rails 5+.



6
votes

Ajoutez le code ci-dessous à votre ./ app / contrôleurs / application_controller.rb : xxx


0 commentaires