Jump to content

webservice errur : Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.


Recommended Posts

Bonjour, 

je suis en train de developpé des appels REST vers le webservice. Lord de GET tout se passe bien, mais lors de POST ou PUT voici mes erreurs :

Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

j'ai ajouté des header dans le dispatcher.php et dans HTACCESS pour les options mais rien.

Vous avez une idée ? 

Edited by abouzouzou
changer la question (see edit history)
Link to comment
Share on other sites

20 hours ago, abouzouzou said:

Bonjour, 

je suis en train de développé un dashboard avec le framework vuejs3 qui se connecte sur l'api rest de prestashop, je recupère bien mes commandes, le detail les status etc... puis j'essaie d'updater le status d'une commande avec axios et en JSON mais j'ai une erreur bizarre de preflight.

Est-ce possible de mettre à jour une commande ? si oui suffit-il juste de la récupérer puis de mettre à jour notre donnée et de renvoyé le tout dans un post ? put ? 

merci

Déjà de bases les webservices on ne peut ajouter ou modifier des objets seulement en XML (pas top)

Edited by abouzouzou (see edit history)
Link to comment
Share on other sites

  • 10 months later...

Bonjour, 

En JS, quand l'API Fetch ou Axios sont utilisés, ils envoient toujours une requête avec la méthode "OPTIONS" qui correspond à une sorte d'ACK (Acknowledgement) pour voir s'ils ont le droit d'effectuer des requêtes en utilisant d'autres méthodes comme GET ou POST

En plus de la modification des headers dans le fichier /webservice/dispatcher.php il faudra également retourner une réponse en 200 quand une requête de preflight avec la méthode "OPTIONS" est envoyée, ceci n'est pas géré par défaut par Prestashop. 

Voici une proposition d'un bout de code (avec modification des headers inclus) à ajouter dans le fichier /webservice/dispatcher.php pour que ça marche 

// Modification des headers pour les méthodes
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Content-Type, Authorization');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: GET,HEAD,OPTIONS,POST,PUT');
// Retour OK si la méthode est en preflight
if ($_SERVER['REQUEST_METHOD'] === "OPTIONS") {
    return http_response_code(200);
}

Attention, la valeur * pour le paramètre "Access-Control-Allow-Origin" doit absolument être changé avant le déploiement en production vu ce n'est pas une pratique sécurisée.

Réponse inspirée de ce thread : https://stackoverflow.com/questions/53298478/has-been-blocked-by-cors-policy-response-to-preflight-request-doesn-t-pass-acce

Edited by Nouhail AL FIDI (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...