Почему middleware блокирует страницы?

Рейтинг: 0Ответов: 1Опубликовано: 07.03.2023

Использую вполне стандартный функционал. Использую два middleware по умолчанию: auth и guest. В файле app\Http\Kernel.php прописаны следующие строки:

 protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
         ...
    ];

Создал два контроллера для авторизации и регистрации: LoginController и RegisterController. В LoginController в конструкторе пишу такой код:

class LoginController extends Controller
{
    public function __construct() {
        $this->middleware('guest')->except('logout');
    }

    //Форма входа
    public function login() {
        return view('auth.login');
    }
    ...

В контроллере RegisterController пишу:

// Контроллер регистрации пользователя
class RegisterController extends Controller
{
    public function __construct() {
        $this->middleware('guest');
    }

    // Форма регистрации
    public function register() {
       return view('auth.register');
    }
   ...

В route/web.php пишу такой код:

Route::group([
    'as' => 'auth.', // имя маршрута, например auth.index
    'prefix' => 'auth', // префикс маршрута, например auth/index
], function () {
// Форма регистрации
    Route::get('register', [RegisterController::class, 'register'])->name('register');

// Создание пользователя
    Route::post('register', [RegisterController::class, 'create'])->name('create');
//Форма входа
    Route::get('login', [LoginController::class, 'login'])->name('login');

// аутентификация
    Route::post('login', [LoginController::class, 'autenticate'])->name('auth');

// выход
    Route::get('logout', [LoginController::class, 'logout'])->name('logout');
});

Когда перехожу по адресу "сайт\public\auth\register" или "сайт\public\auth\login" ругается на несуществующую страницу. Почему так происходит? Кстати до этого все работало, а потом перестало. Когда закомментировал код в конструкторах RegisterController и LoginController на вышеупомянутые страницы стало переходить успешно, но при успешной авторизации юзер все равно видит контент страницы авторизации и регистрации. Как исправить ошибку?

Ответы

▲ 0

Если кому интересно. Все заработало. В \App\Http\Middleware\Authenticate прописываем следующее:

class Authenticate extends Middleware
{    
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            return route('auth.login');
        }
    }
}

А в файле App\Http\Middleware\RedirectIfAuthenticated также переопределяем роут.

   public function handle(Request $request, Closure $next, ...$guards)
    {
        $guards = empty($guards) ? [null] : $guards;

        foreach ($guards as $guard) {
            if (Auth::guard($guard)->check()) {
                return redirect()->route('user.index');
            }
        }

        return $next($request);
    }