Introduction
La gestion de la redirection des utilisateurs authentifiés a connu une évolution significative avec Laravel 11. Auparavant, dans les versions précédentes de Laravel, le processus de redirection s’appuyait sur deux éléments clés :
- Le middleware
RedirectIfAuthenticated - La constante
HOMEdéfinie dans leRouteServiceProvider
<?php
namespace App\Http\Middleware;
use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect(RouteServiceProvider::HOME);
}
return $next($request);
}
}
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
class RouteServiceProvider extends ServiceProvider
{
/**
* This namespace is applied to your controller routes.
*
* In addition, it is set as the URL generator's root namespace.
*
* @var string
*/
protected $namespace = 'App\Http\Controllers';
/**
* The path to the "home" route for your application.
*
* @var string
*/
public const HOME = '/dashboard';
Les changements majeurs dans Laravel 11
Avec Laravel 11, une refonte importante a été effectuée : le middleware RedirectIfAuthenticated et la configuration via RouteServiceProvider::HOME ont été intégrés directement dans le cœur de Laravel. Cette modification s’inscrit dans la volonté de Laravel de simplifier et de standardiser certains comportements courants du framework.
Par défaut, Laravel va rediriger nos utilisateurs vers 2 routes possibles, home & dashboard.
/**
* Get the default URI the user should be redirected to when they are authenticated.
*/
protected function defaultRedirectUri(): string
{
foreach (['dashboard', 'home'] as $uri) {
if (Route::has($uri)) {
return route($uri);
}
}
$routes = Route::getRoutes()->get('GET');
foreach (['dashboard', 'home'] as $uri) {
if (isset($routes[$uri])) {
return '/'.$uri;
}
}
return '/';
}
Mais ces deux routes pourraient ne pas nous convenir, et nous aurions peut-être envie de les rediriger vers “/tata-yoyo” par exemple.
Pour se faire, rien de plus simple, il suffit à présent de modifier le fichier app.php en indiquant la route désirée.
<?php
use App\Http\Middleware\HandleInertiaRequests;
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
use Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
$middleware->web(append: [
HandleInertiaRequests::class,
AddLinkHeadersForPreloadedAssets::class,
]);
$middleware->redirectUsersTo('/tata-yoyo');
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
Et voilà ! C’est tout, rien de plus simple, elle est pas belle la vie ?
