Я использую 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');
});
auth
на маршрутах / контроллерах, которые требуют аутентификации пользователя.web
здесь служит небольшой уловкой, потому что по умолчанию он уже применяется через ваших провайдеров. - person Qirel   schedule 24.09.2020web
уже применено ко всем вашим маршрутам вweb.php
... вам нужноauth
промежуточное ПО для перенаправления неаутентифицированных пользователей - person lagbox   schedule 24.09.2020