Middleware guest
Middleware guest применяется к маршрутам и контроллерам
для ограничения доступа только для гостей (неавторизованных
пользователей). Если пользователь уже авторизован, он будет
перенаправлен на маршрут 'home' или на указанный
в параметрах. Это полезно для страниц входа, регистрации
и восстановления пароля.
Синтаксис
<?php
// В маршруте
Route::get('/login', [LoginController::class, 'showLoginForm'])->middleware('guest');
?>
Пример
Создадим маршрут для страницы входа с применением middleware
guest:
<?php
use App\Http\Controllers\Auth\LoginController;
use Illuminate\Support\Facades\Route;
Route::get('/login', [LoginController::class, 'showLoginForm'])->middleware('guest')->name('login');
Route::post('/login', [LoginController::class, 'login']);
?>
Пример
Группируем несколько маршрутов для гостей с помощью метода
middleware:
<?php
use App\Http\Controllers\Auth\RegisterController;
use App\Http\Controllers\Auth\ForgotPasswordController;
use Illuminate\Support\Facades\Route;
Route::middleware('guest')->group(function () {
Route::get('/register', [RegisterController::class, 'showRegistrationForm']);
Route::post('/register', [RegisterController::class, 'register']);
Route::get('/forgot-password', [ForgotPasswordController::class, 'showLinkRequestForm']);
});
?>
Пример
Изменение маршрута для перенаправления авторизованных пользователей:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/login', function () {
return view('auth.login');
})->middleware('guest')->name('login');
?>
По умолчанию авторизованные пользователи перенаправляются
на маршрут 'home'. Это поведение можно изменить
в классе RedirectIfAuthenticated:
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
public function handle(Request $request, \Closure $next, string ...$guards)
{
$guards = empty($guards) ? [null] : $guards;
foreach ($guards as $guard) {
if (Auth::guard($guard)->check()) {
return redirect('/dashboard');
}
}
return $next($request);
}
}
?>
Результат работы middleware при попытке авторизованного пользователя посетить страницу входа:
"redirect to /dashboard"
Пример
Использование middleware guest в контроллере
через конструктор:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
public function __construct()
{
$this->middleware('guest')->except('logout');
}
public function showLoginForm()
{
return view('auth.login');
}
public function login(Request $request)
{
$credentials = $request->validate([
'email' => ['required', 'email'],
'password' => ['required'],
]);
if (Auth::attempt($credentials)) {
$request->session()->regenerate();
return redirect()->intended('dashboard');
}
return back()->withErrors([
'email' => 'The provided credentials do not match our records.',
]);
}
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/');
}
}
?>
Смотрите также
-
метод
auth,
который требует авторизации для доступа к маршруту -
метод
can,
который проверяет права пользователя на действие -
метод
verified,
который требует подтверждения email -
метод
password-confirm,
который требует подтверждения пароля перед выполнением действия