web-dev-qa-db-fra.com

redirect_to utiliser POST dans les rails

Est-il possible de rediriger à l'aide d'une méthode POST? 
Ou les redirections doivent-elles toujours être effectuées à l'aide de GET?

L'utilisation à cette fin se trouve dans les dernières étapes d'un processus de commande pour un site de commerce électronique, afin d'envoyer les données au processeur de paiement, sans introduire une étape supplémentaire pour l'utilisateur.

56
andi

La redirection n'est pas possible avec les demandes POST - il s'agit de du protocole HTTP/1.1 .

Vous pouvez soit introduire une autre étape contenant les données de formulaire à poster dans le processeur de paiement, soit envoyer l’envoi depuis votre application (ce que j’ai fait lorsque je travaillais avec PROTX).

76
Codebeef

J'ai "résolu" le problème en affichant une page de résumé avec tous les produits et les frais de livraison, etc., avec le message type de type "pour confirmer et payer vos achats, cliquez sur le bouton Continuer en dessous". Le bouton Continuer amène le site à POST les données du produit et le reste jusqu'au processeur de paiement.

La réponse courte - là est une autre étape pour l'utilisateur. Cependant, la clé est de faire en sorte que cela paraisse aussi naturel et fasse partie de l'expérience de caisse au maximum. De cette façon, cela ne ressemble pas trop à "juste une autre étape".

Cependant, si vous trouvez une meilleure solution, je serais très intéressée d'entendre ce que c'était :)

14
Mark Embling

Avec une simple ligne de javascript, vous pouvez avoir votre formulaire POST se poster ( form.submit () ). Vous pouvez ensuite masquer le formulaire et afficher un simple message "patientez pendant que ..." lors de l'envoi du formulaire au processeur de paiement.

11
Alsciende

L'idée est de faire une "redirection" tout en générant un formulaire avec method: post.

Je suis confronté au même problème et extrait la solution dans la variable gem repost. Elle ne fonctionne donc pas pour vous. Vous n'avez donc pas besoin de créer une vue distincte avec le formulaire. Utilisez simplement la fonction fournie par la fonction gem redirect_post() sur votre contrôleur.

class MyController < ActionController::Base
...
  def some_action
    redirect_post('url', params: {}, options: {})
  end
...
end
0
yaro

hack html: à la place de redirect_to, restituez ce template html (basé sur Alsciende answer)

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

<form id="step" name="step" action="<%= URL %>" method="POST">
  <!-- optional params -->
  <input type='hidden' name='token' value='e7295d6d1cd512a8621f1de5965b90a' />

</form>

<script type="text/javascript">
 $(document).ready(function () {
   setTimeout(function () {
     $("#step").submit();
   }, 0);
 });
</script>
0
Abel