Suivre les redirections php en js utilisant fetch

Eléphant du PHP | 61 Messages

29 mars 2021, 01:04

Bonsoir, ma situation est plutôt simple, je veux pouvoir réellement rédiger si dans un script php appelé en asynchrone il y'a une redirection.

Par exemple une page réserver à un admin, normalement he fait un truc comme ça:
<?php
    $auth->requireRole('admin'); // methode dans laquelle je rédige (header('Location: /')) vers la page d'accueil si l'utilisateur n'est pas admin
En synchrone tous fonctionne bien, mais lorsque j'appelle la même page ne asynchrone (fetch de js) j'aimerais que le redirection soit aussi effective.

Merci d'avance.

Eléphant du PHP | 61 Messages

29 mars 2021, 01:12

Je me dit bien qui doit avoir un moyen pour écouter les redirections et faire un truc du genre
window.location.href = redirection

Mammouth du PHP | 2703 Messages

29 mars 2021, 14:01

le php ne fait pas la redirection, il retourne quelque chose disant qu'il faut faire une redirection. le js qui a appelé le php traite le retour de l'appel ajax du php, fait la redirection le cas échéant.

Eléphant du PHP | 61 Messages

29 mars 2021, 16:00

Bonjour, merci déjà pour, le soucis ici c'est que l'application fonctionne en asynchrone et en synchrone. Donc il est possible que le page soit appelée directement où via une requête ajax.

Mammouth du PHP | 2703 Messages

29 mars 2021, 16:09

avoir 2 points d'entrées php règle le souci, un pour les appels synchrones qui retournent une page web complète, un autre pour un retour ajax.

Eléphant du PHP | 61 Messages

29 mars 2021, 16:15

Mais faire ça pour toutes les pages est plutôt compliqué question structure de code, je me suis est possible d'avoir une fonction :
function verifyHTTP($url) {
   if (isAjax === true){
       return $url;
   }
   Header('Location: ' .$url);
}

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

29 mars 2021, 18:01

Salutations !

Pas sûr de bien comprendre... quand tu appelles ta page avec du javascript, la condition est vérifiée : si l'utilisateur n'est pas admin, le serveur exécute le header et retourne le résultat de la nouvelle page (donc de la page d'accueil) à ton script...

Tu voudrais que si l'appel en js a déclenché le header, cela redirige également l'utilisateur vers la page d'accueil ? Pour cela il faut regarder le contenu de la réponse envoyée par le serveur, trouver l'élément qui te permet de savoir qu'il s'agit de la page d'accueil et effectuer une redirection automatique en javascript vers ta page d'accueil via un document.location par exemple...

Est-ce bien cela ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 61 Messages

30 mars 2021, 15:06

Salut Ryle, oui exactement mais dans le header renvoyé pas dans le navigateur il y'a pas une sorte de clé pour savoir s'il y'a eu une redirection

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

30 mars 2021, 15:35

Il faudrait vérifier, mais en principe, le header('Location') de php retourne nativement au navigateur un code HTTP 302 pour indiquer qu'il y a eu une redirection. Au pire, si ce n'est pas le cas, tu peux ajouter ce code dans un second header côté php.

Côté javascript, si tu utilises jquery par exemple, il y a des méthodes getResponseHeader() et getAllResponseHeaders() qui te permettent de regarder les informations présentes dans le header de ta réponse. Si tu y trouves l'info de redirection que tu cherches, alors tu fais le document.location pour rediriger l'utilisateur, sinon tu peux poursuivre ton traitement :)

Après, en ce qui me concerne, je préfère avoir un message d'erreur m'indiquant que l'appel a échoué parce que je n'ai pas les droits nécessaires ou parce qu'il y a eu une erreur quelque part, plutôt que d'être redirigé vers une page d'accueil sans savoir pourquoi ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...