Besoin d'aide ?

Erreur "La page n’est pas redirigée correctement" dans mon middleware

Avatar de micraux
micraux

Bonjour,

Comme suite à un précédent billet (merci au passage à bestmomo et CinquièmeDimension pour leur aide), je me suis lancé dans la création d'un middleware pour que quand un visiteur arrive sur le site, on puisse peupler une variable de session (choix du tarif).

J'ai suivi la doc Laravel et donc créé le fichier app/Http/Middleware/ChechTarif.php, puis l'ai déclaré dans le kernel.php.

1ère tentative :

namespace App\Http\Middleware;
use Closure;
class CheckTarif
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if( ! $request->session()->exists('tarif') ) {
            return redirect('accueil');
        }
        return $next($request);
    }
}

Résultat, une erreur : RuntimeException. Session store not set on request.

Je retourne donc un peu plus loin sur la doc et je découvre que mon middleware (tel qu'il est écrit dans ma première tentative) exécute sa tâche AVANT que la requête ne soit traitée. Je suppose que c'est pour ça que ça coince, donc...

2ème tentative :

namespace App\Http\Middleware;
use Closure;
class CheckTarif
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $response = $next($request);
        if( ! $request->session()->exists('tarif') ) {
            return redirect('/');
        }
        return $response;
    }
}

Ce coup-ci, plus d'erreur me parlant de la session mais mon navigateur râle : La page n’est pas redirigée correctement.

Je dois rater un truc mais je ne vois pas lequel... Si quelqu'un a une idée, je suis preneur :-)

Avatar de micraux
micraux

Bon, je m'auto-réponds :-)

En fait, c'est tout bête : comme j'ai mis mon middleware dans le kernel.php, toutes mes pages étaient soumises à ce test. Donc, la page de base aussi, ce qui fait que mon redirect('/') tournait dans une boucle infinie !

Du coup, j'ai retité mon middleware du kernel.php et j'ai simplement fait un groupe de routes soumises à ce middleware dans mon web.php en y incluant toutes mes routes (exceptée '/' bien sûr) et ça fonctionne !

Vous ne pouvez pas répondre à ce sujet.