Salut à tous!
Depuis peu je me suis lancé dans le dev mobile avec Ionic.
J'ai donc de l'angularJS en front et en back j'me suis dit "tiens pourquoi pas Cake ?". J'héberge mon cake sur un gros serveur en externe.
(Il s'agit de la version 2.8.1 de cakephp)
Toutes les configurations sont bonnes coté AngularJS et coté cake aussi (en tout cas les GET fonctionnes).
Sauf que le preflight bloque car cake ne redirige pas la methode OPTIONS.. je me retrouve donc avec une erreur 4o4 bidon.. :/
Y a t-il un moyen avec CakePhp de gérer la methode OPTIONS afin de valider le preflight de sécurité, et donc de laisser faire les echanges de données ?
J'ai pensé à créer des routes pour mon besoin, mais je ne sais pas comment spécifier la méthode OPTIONS dans la route en question.
Merci pour votre aide ;)
Tu as essayé ça (tiré de la doc) ?
Router::connect(
"/:controller/:id",
array("action" => "edit", "[method]" => "OPTIONS"),
array("id" => "[0-9]+")
);
Salut tleb! Merci pour ta réponse !
Malheureusement oui, j'ai eu le reflexe de la doc, et ça n'a pas fonctionné.
Peut etre me suis-je trompé tu me diras, voici ce que j'ai :
Au niveau de l'adresse appelée : http://mon.serveur.api/users/1.json
Au niveau de la route :
Router::connect(
"/:controller/:id",
array("action" => "preflight", "[method]" => "OPTIONS"),
array("id" => "[0-9]+")
);
.. que j'ai mis en dessous des connect déjà écrit. Mais étant donné que c'est la seule route avec la methode OPTIONS je ne pense pas que ca pose de problème.
Et au niveau de ma fonction :
public function preflight(){
if ($request->method() == 'OPTIONS')
{
$method = $request->header('Access-Control-Request-Method');
$headers = $request->header('Access-Control-Request-Headers');
$response->header('Access-Control-Allow-Headers', $headers);
$response->header('Access-Control-Allow-Methods', empty($method) ? 'GET, POST, PUT, DELETE' : $method);
$response->header('Access-Control-Allow-Credentials', 'true');
$response->header('Access-Control-Max-Age', '86400');
$response->send();
die;
}
}
Ce code provient de cet article : http://www.thinkingmedia.ca/2015/07/how-to-fix-404-error-on-options-request-in-cakephp-3-when-making-a-post-request-with-rest/
Je n'ai pas de vue en revanche.. mais étant donné que l'erreur est la même, à savoir :
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
.. je pense que le problème reste le même.. ^^
EDIT
Je viens de ajouter .json à la route.. (oops).
Mais rien ne change.. :/
Merci de ta réponse Lartak!
Je sais j'ai voulu juste m'en inpirer rapidement pour comprendre le process, mais tu remarquera que c'est pas du tout le même code..
Le truc c'est que je ne sais même pas ce qu'attend la requete OPTIONS en retour. :/
mais tu remarquera que c'est pas du tout le même code..
En quoi ce n'est pas le même code ?
Si je recopie une partie du code qu'il y a sur le site en suivant le lien que tu donnes :
if ($request->method() == 'OPTIONS')
{
$method = $request->header('Access-Control-Request-Method');
$headers = $request->header('Access-Control-Request-Headers');
$response->header('Access-Control-Allow-Headers', $headers);
$response->header('Access-Control-Allow-Methods', empty($method) ? 'GET, POST, PUT, DELETE' : $method);
$response->header('Access-Control-Allow-Credentials', 'true');
$response->header('Access-Control-Max-Age', '86400');
$response->send();
die;
}
Puis le tien :
if ($request->method() == 'OPTIONS')
{
$method = $request->header('Access-Control-Request-Method');
$headers = $request->header('Access-Control-Request-Headers');
$response->header('Access-Control-Allow-Headers', $headers);
$response->header('Access-Control-Allow-Methods', empty($method) ? 'GET, POST, PUT, DELETE' : $method);
$response->header('Access-Control-Allow-Credentials', 'true');
$response->header('Access-Control-Max-Age', '86400');
$response->send();
die;
}
À quel moment vois-tu une quelconque différence entre les deux codes ?
Pour moi, ils sont parfaitement identiques.
La seule chose que j'ai modifié en copiant/collant les deux codes, c'est l'indentation.
Non, ce que je veux dire c'est que je ne me suis pas occupé de toute l'architecture propre à la version 3. Tout le coté DispatcherFilter je ne l'ai pas copié, j'ai juste cherché à comprendre. Ensuite je renvois le même résultat en effet parce que comme dit plus haut, je ne sais pas ce qu'attend la requete de preflight, donc je m'en suis très inspiré, oui.
Tu n'aurais pas une solution pour la v2 plutôt ? Ou bien pourrais tu m'aiguiller sur le genre de réponse qu'attend cette requête ?