Redirection middleware

Par TartanLeGrand, il y a 8 ans


Bonjour,

Je souhaite crée un middleware qui redirige l'utilisateur à la page de login si il effectue une action alors qu'il n'est pas connecté. Puis une fois connecté fini l'action qu'il étais en train de faire.

Exemple:
L'utilisateur non connecté écrie son commentaire.
Il est redirigé vers la page de login.
Une fois connecté l'action est fini.

Ce que je fais

public function handle($request, Closure $next) { if (Auth::guest()) { return redirect()->guest(route('login')); } return $next($request); }

Ce que j'obtiens

L'utilisateur est bien redirigé vers l'uri sauf qu'il na pas le même type de requet elle passe de get à post.

Merci par avance de votre aide

7 réponses

TartanLeGrand, il y a 8 ans

Je n'ai pas opté pour cette solution que je trouve brouillon. Pour ce qui est de bloquer l'utilisateur je ne trouve pas cette option moins attirante pour l'utilisateur.

Perfectos, il y a 8 ans

Il existe déjà le middleware Auth inclu dans Laravel.

TartanLeGrand, il y a 8 ans

Oui, mais il ne redirige pas avec les données comme un commentaire.

Perfectos, il y a 8 ans

Lorsque tu envoies un commentaire en POST, tu stockes les donnés envoyées en GET ou dans la session puis une fois connecté, tu regardes dans le LOGINCONTROLLER si il y a des donnés et tu effectues l'action souhaitée ensuite. Sache que tu peux également bloquer l'envoie de commentaire dans le front en indiquant qu'une connection est requise.

Alexandre #lbac, il y a 8 ans

Tu peux faire une solution pas très très propre, mais fonctionnelle. Reproduire le middleware Auth, mais dans ta redirection tu inclus les données de POST

return redirect()->guest(route('login'))->withInputs();

Et durant la connexion tu le rediriges sur l'ancienne page toujours avec les inputs.

Autre technique, tu affiches le formulaire de connexion, à la place du formulaire d'action, tu réalises la connexion en ajax, et si la connexion est bonne tu affiches le formulaire souhaité.

Alexandre #lbac, il y a 8 ans

Comme dit plus haut...

->withInputs();