Bonjour,
Voila je rencontre une problèmatique avec mon code utilisant slim 3.
Je souhaite créer un middleware pour gérer la présence de la variable $_SESSION['auth']
, si elle existe pas je souhaite rediriger sur ma page login, la vérification fonctionne, mais pour la redirection je suis coincé, comment je peux dire à slim de rediriger sur une page (route) dans mon middleware ?
Salut, j'ai déjà regarder la vidéo de grafikart, j'ai même fait mon propre template slim...
Ta solution n'est pas bonne, car mon container ne possède en aucun cas l'objet auth
, j'avais déjà regarder sur internet des solutions de ce genre et au final j'ai trouvé via ce tuto youtube avec quelques modifs:
https://www.youtube.com/watch?v=ZLmCdbNYHAo
Mon middleware:
<?php
namespace App\Middlewares;
use Slim\Http\Request;
use Slim\Http\Response;
class SessionMiddleware {
private $container;
public function __construct($container) {
$this->container = $container;
}
public function __invoke(Request $request, Response $response, $next) {
if (!isset($_SESSION['auth']) || empty($_SESSION['auth'])) {
return $response->withRedirect($this->container->router->pathFor('login'));
}
$response = $next($request, $response);
return $response;
}
}
Mes routes:
$app->group('', function () {
// Route logout
$this->get('/logout', LoginController::class. ':getLogout')->setName('logout');
// Routes home
$this->get('/', HomeController::class. ':getHome')->setName('home');
$this->post('/', HomeController::class. ':postHome');
})->add(new App\Middlewares\SessionMiddleware($container));
Merci d'avoir quand même pris le temps pour essayer de m'aider :)
Le code est assé simple voici:
public function __invoke(Request $request, Response $response, $next)
{
if(!$this->container->auth->check()){
return $response->withStatus(200)->withHeader('Location', 'login');
}
$response = $next($request, $response);
return $response;
}
Explication :
je stock la variable $_SESSION['auth'] dans le container. Si celle-ci n'existe pas je renoi une reponse avec redirection "login" est le nom de ma route.
Je te conseille de regarder le tuto de grafikart sur slim 3 il est très bien fait et donne une bonne base pour pour créer un projet Slim, après à toi d'adapter à tes besoins.