Я создал пользовательскую аутентификацию для своего приложения Laravel, следуя этому руководству: https://medium.com/@nasrulhazim/laravel-using-different-table-and-guard-for-login-bc426d067901
Я адаптировал его под свои нужды, но особо менять не пришлось.
В конце концов, когда я пытаюсь перейти по маршруту / home, но он говорит: «Маршрут [логин] не определен».
Я предполагаю, что поведение аутентификации по умолчанию вызывает маршрут входа в систему вместо созданного мной / fidelite / login.
Вот мой провайдер:
fidelite' => [
'driver' => 'eloquent',
'model' => App\Fidelite::class,
],
И охранник
'fidelite' => [
'redirectTo' => 'fidelite.home',
'driver' => 'session',
'provider' => 'fidelite',
],
Маршруты, определенные в файле web.php
Route::prefix('fidelite')
->as('fidelite.')
->group(function() {
Route::get('/home', 'Home\[email protected]')->name('home');
Route::namespace('Auth\Login')
->group(function() {
Route::get('login', '[email protected]')->name('login');
Route::post('login', '[email protected]')->name('login');
Route::post('logout', '[email protected]')->name('logout');
Route::get('register', '[email protected]')->name('register');
});
});
По сути, есть два контроллера; первый, FideliteController добавляет промежуточное ПО и показывает необходимые формы для входа / регистрации
class FideliteController extends DefaultLoginController
{
protected $redirectTo = '/fidelite/home';
public function __construct()
{
$this->middleware('guest:fidelite')->except('logout');
}
public function showLoginForm()
{
return view('auth.login.fidelite');
}
public function showRegisterForm()
{
return view('auth.compte');
}
public function username()
{
return 'email';
}
protected function guard()
{
return Auth::guard('fidelite');
}
}
А другой возвращает домашнюю страницу / fidelite /, когда пользователь вошел в систему.
class FideliteHomeController extends Controller
{
public function __construct()
{
$this->middleware('auth:fidelite');
}
public function index()
{
return view('home.fidelite');
}
}
Что-то мне не хватает, но что?
Большое спасибо за вашу помощь и время …
На самом деле ваш login
маршрут имеет имя fidelite.login
из-за группы as
и имеет повторяющиеся имена fidelite.login
. — person Laurent Kreps schedule 10.07.2019
это верно, и если я перейду в / fidelite / login, он работает. Но когда я вызываю маршрут / home / fidelite, у меня возникает исключение InvalidArgumentException — маршрут [логин] не определен. Я думаю, это как-то вызывает маршрут / login — person Laurent Kreps schedule 10.07.2019
Вероятно, это связано с тем, что на вашей домашней странице есть шаблон, в котором вы использовали route('login')
для создания ссылки для входа. — person Laurent Kreps schedule 10.07.2019
Также проверьте промежуточное ПО, на которое ссылается / используется в FideliteHomeController ::constructor
$this->middleware('auth:fidelite');
, оно могло использовать любое перенаправление входа в систему. — person Laurent Kreps schedule 10.07.2019
Я не думаю, что это проблема, с которой я столкнулся, потому что, когда я редактирую свой FideliteHomeController и заменяю return view('home.fidelite');
в индексной функции на return 'hello';
, возникает та же ошибка — person Laurent Kreps schedule 10.07.2019
Затем это файл просмотра, в котором создается маршрут login
, очистите cache
для просмотров. — person Laurent Kreps schedule 10.07.2019
Файл входа в систему содержит только {{ route('fidelite.login') }}
, но, возможно, я что-то пропустил в промежуточном программном обеспечении; На самом деле я не создавал промежуточное ПО (я следовал упомянутому руководству), я думаю, это промежуточное ПО loginController use App\Http\Controllers\Auth\LoginController as DefaultLoginController;
Я расширяю — person Laurent Kreps schedule 10.07.2019
Нашел! Спасибо Альфе, которая помогает мне найти проблему!
Проблема заключалась в том, что промежуточное ПО, которое я использовал (Authenticate.php), перенаправляло на маршрут («логин») вместо нужного мне настраиваемого маршрута.
Вы дублируете маршрут имени входа. измените имя входа на любое конкретное имя, которое должным образом определяет поведение вашего маршрута.