Requête ajax post session vide

A l'heure des applications web en javascript côté client, la pérennité des données et le chargement des données se déroulent souvent à travers des requêtes AJAX, il est dans les bonnes pratiques du web d'utiliser des API RESTful pour cela le chargement des données utilise des requêtes AJAX envoyés en GET, et la pérennité des données se fait à travers des requêtes AJAX envoyés en POST.

En AJAX, pas de souci pour les requêtes envoyé en GET mais en POST si vous utilisez une sécurisation de votre API par token c'est une autre histoire, il se peut que votre session soit vide ou que la requête AJAX ne passe pas.

Pour faire simple lorsque l'on appelle une action d'une API si cette action permet de modifier des données il faut être sûr que la page qui appelle notre API est bien générée par le même serveur et la même application que l'API. On peut aussi appelé notre API depuis une page générée par un autre serveur ou une autre application mais c'est encore plus compliqué pour la sécurité.

Restons-en au fait que notre API et notre page sont générées par la même application, nous allons donc voir ce token de sécurité pour éviter les attaques de type Cross-site request forgery (CSRF).

Le framework Ruby On Rails par exemple utilise ce type de sécurité. La sécurité étant déjà en place dans le framework, si votre API est basé sur celui-ci, lors de votre requête AJAX en GET, vous n'aurez aucun souci par contre à la première requête POST, vous pourriez avoir une surprise.

Le framework Rails attendra de recevoir en paramètres de votre requête AJAX de type POST ce token de sécurité appelé chez Rails csrf-token.

Afin de transmettre ce token de sécurité dans chacune de vos requêtes AJAX peut importe le type de requête GET, POST, PUT, PATCH, DELETE, nous allons configuré l'ensemble des requêtes AJAX en insérant ce code javascript :

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

Et voilà vos requêtes AJAX, seront acceptés par le framework Ruby On Rails peut importe le verb HTTP utilisé.

Libre de développer, Julien.