Laravel 8 - Как перенаправить на страницу входа в систему, когда вы не вошли в систему

Я использую Laravel 8, и у меня возникают проблемы с перенаправлением пользователя, когда он не вошел в систему. Я нашел несколько похожих вопросов, но все они находятся в более старых версиях laravel, и ни одно из их решений не работает.

Я считаю, что должен использовать Route::group(), чтобы применить перенаправление ко всем моим маршрутам. Сейчас это выглядит так:

// In web.php


Route::group(, function(){
    Route::get('/', [HomeController::class, 'home'])->name('home');
    Route::get('/account', [HomeController::class, 'account'])->name('account');
    Route::get('/feedback', [HomeController::class, 'feedback'])->name('feedback');
    Route::get('/help', [HomeController::class, 'help'])->name('help');
});

Я не уверен, что я должен использовать в своем первом параметре в групповой функции. Я считаю, что мне нужно просмотреть сеанс или файл cookie, чтобы узнать, есть ли зарегистрированный пользователь?

На данный момент пользователю не разрешается входить в систему, если он находится на странице входа и вводит неправильный пользователь / пароль, чтобы аутентификация работала. Однако, если они вручную вводят URL-адрес, например. ip:port/help, им будет разрешен доступ.

Я хочу, чтобы все маршруты на сайте перенаправлялись на страницу входа, если пользователь не аутентифицирован.

Мой код аутентификации в моем LoginController.php выглядит так:

public function doLogin(Request $request){
        DB::connection('mysql');
        $args = $request->except('_token');

        // attempt to do the login
        if (Auth::attempt($args)) {

            // validation successful!
            return redirect('home');

        } else {        

            // validation not successful, send back to form 
            return redirect('login');
        }

    }

Мой путь к функции doLogin, которая вызывается из действия формы html, выглядит так:

Route::post('authenticate', [LoginController::class, 'doLogin'])->middleware('web');

Если бы кто-нибудь мог предложить какие-либо решения или направить меня по правильному пути, это было бы потрясающе. Спасибо!

Изменить: Решение!

In the parameter I was questioning about I needed to simply add the auth middleware.
Route::group(['middleware' => 'auth'], function(){
    Route::get('/', [HomeController::class, 'home'])->name('home');
    Route::get('/account', [HomeController::class, 'account'])->name('account');
    Route::get('/feedback', [HomeController::class, 'feedback'])->name('feedback');
    Route::get('/help', [HomeController::class, 'help'])->name('help');
});


person Thomas M    schedule 24.09.2020    source источник
comment
Используйте промежуточное ПО auth на маршрутах / контроллерах, которые требуют аутентификации пользователя. web здесь служит небольшой уловкой, потому что по умолчанию он уже применяется через ваших провайдеров.   -  person Qirel    schedule 24.09.2020
comment
Промежуточное ПО web уже применено ко всем вашим маршрутам в web.php ... вам нужно auth промежуточное ПО для перенаправления неаутентифицированных пользователей   -  person lagbox    schedule 24.09.2020
comment
Нужно ли мне вообще настраивать промежуточное ПО или оно должно работать как есть?   -  person Thomas M    schedule 24.09.2020
comment
Неважно, я понял. Спасибо!   -  person Thomas M    schedule 24.09.2020


Ответы (1)


Вам просто нужно добавить промежуточное ПО для аутентификации следующим образом:

Route::group(['middleware' => 'auth'], function(){
Route::get('/', [HomeController::class, 'home'])->name('home');
Route::get('/account', [HomeController::class, 'account'])->name('account');
Route::get('/feedback', [HomeController::class, 'feedback'])->name('feedback');
Route::get('/help', [HomeController::class, 'help'])->name('help');
});
person Ale DC    schedule 10.11.2020