Маршрут [логин] не определен
Попытка играть с Laravel сегодня в первый раз. Я получаю следующую ошибку при попытке посетить localhost/project/public:
InvalidArgumentException
Маршрут [логин] не определен.
Приложение/routes.php:
<?php
Route::get('/', '[email protected]');
Route::get('login', '[email protected]');
Route::post('login', '[email protected]');
Route::get('dashboard', '[email protected]');
приложение/контроллеры/HomeController.php:
<?php
class HomeController extends Controller {
public function redirect()
{
if (Auth::check())
return Redirect::route('dashboard');
return Redirect::route('login');
}
}
приложение/контроллеры/LoginContoller.php:
<?php
class LoginController extends Controller {
public function show()
{
if (Auth::check())
return Redirect::route('dashboard');
return View::make('login');
}
public function do()
{
// do login
}
}
приложение/контроллеры/DashboardController.php:
<?php
class DashboardController extends Controller {
public function show()
{
if (Auth::guest())
return Redirect::route('login');
return View::make('dashboard');
}
}
Почему я получаю эту ошибку?
Ответы
Ответ 1
Вы пытаетесь перенаправить на именованный маршрут, имя которого - login
, но у вас нет маршрутов с таким именем:
Route::post('login', [ 'as' => 'login', 'uses' => '[email protected]']);
Часть 'as'
второго параметра определяет название маршрута. Первый строковый параметр определяет его маршрут.
Ответ 2
В приложении \Exceptions\Handler.php
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
return redirect()->guest(route('auth.login'));
}
Ответ 3
Laravel представил именованные маршруты в Laravel 4.2.
ЧТО ТАКОЕ ИМЕННЫЕ МАРШРУТЫ?
Именованные маршруты позволяют вам давать имена вашему пути к маршрутизатору. Следовательно, используя имя, мы можем назвать маршруты в требуемом файле.
КАК СОЗДАТЬ ИМЕННЫЕ МАРШРУТЫ?
Именованные маршруты создаются двумя разными способами: as и name()
МЕТОД 1:
Route::get('about',array('as'=>'about-as',function()
{
return view('about');
}
));
МЕТОД 2:
Route::get('about',function()
{
return view('about');
})->name('about-as');
Как мы используем в представлениях?
<a href="{{ URL::route("about-as") }}">about-as</a>
Следовательно, laravel 'middleware' => 'auth' уже предопределен для перенаправления в качестве страницы входа, если пользователь еще не вошел в систему. Поэтому мы должны использовать в качестве ключевого слова
Route::get('login',array('as'=>'login',function(){
return view('login');
}));
Ответ 4
Вам нужно добавить следующую строку в ваш файл маршрутов web.php:
Auth::routes();
В случае, если у вас есть пользовательские маршруты авторизации, убедитесь, что вы/логин-маршрут имеют 'as' => 'login'
Ответ 5
В случае API или, скажем, при реализации JWT. Промежуточное программное обеспечение JWT выдает это исключение, когда оно не может найти токен и пытается перенаправить его в журнал на маршруте. Поскольку он не может найти ни одного журнала в указанном маршруте, он выдает это исключение. Вы можете изменить маршрут в "app\Exceptions\Handler.php"
использовать Illuminate\Auth\AuthenticationException;
protected function unauthenticated($request, AuthenticationException $exception){
return $request->expectsJson()
? response()->json(['message' => $exception->getMessage()], 401)
: redirect()->guest(route('ROUTENAME'));
}
Ответ 6
Попробуйте этот метод:
найдите этот файл
"RedirectifAuthenticated.php"
обновите следующее, как вы предпочитаете
if (Auth::guard($guard)->check()) {
return redirect('/');
}
$guard, так как arg примет имя настраиваемого защитного устройства, которое вы установили, например. "admin", тогда это должно быть так.
if (Auth::guard('admin')->check()) {
return redirect('/admin/dashboard');
}else{
return redirect('/admin/login');
}
Ответ 7
Недавно я столкнулся с этой ошибкой после использования встроенной маршрутизации аутентификации Laravel с помощью php artisan make:auth
. Когда вы запустите эту команду, эти новые маршруты добавляются в ваш файл web.php:
Auth::routes();
Route::get('/home', '[email protected]')->name('home');
Я, должно быть, случайно удалил эти маршруты. Выполнение php artisan make:auth
снова восстановило маршруты и решило проблему. Я запускаю Laravel 5.5.28.
Ответ 8
попробуйте добавить в заголовок вашего запроса: Accept = application/json postman добавить заголовок
Ответ 9
Замените в своих представлениях (файлы лезвий) все
{{ маршрут ('/')}} ----- by ---- > {{ url ('/')}}
Ответ 10
Я опоздал на вечеринку. если вы ожидаете, что какой-то json вернется не перенаправленным, то отредактируйте обработчик исключений, так что просто сделайте это.
Перейдите в App\Exceptions\Handler.php
Затем отредактируйте этот код:
public function render($request, Exception $exception)
{
return parent::render($request, $exception);
}
в
public function render($request, Exception $exception)
{
return response()->json(
[
'errors' => [
'status' => 401,
'message' => 'Unauthenticated',
]
], 401
);
}
Ответ 11
Если кто-то получает это от отдыхающего клиента (например, Почтальон) - Вам нужно установить в Заголовке значение Accept application/json.
Чтобы сделать это на почтальоне, нажмите на вкладку "Заголовки", добавьте новый ключ "Принять" и введите значение "application/json".
Ответ 12
Route::post('login', '[email protected]')->name('login')
работает очень хорошо, и это чисто и говорит само за себя
Ответ 13
Laravel ^ 5.7
Аутентификация промежуточного программного обеспечения
Laravel ^ 5.7 включает в себя новое промежуточное ПО для обработки и перенаправления неаутентифицированных пользователей.
Он хорошо работает с "web" guard... конечно, маршрут " login " (или как вы его называете), должен быть определен в web.php.
проблема в том, когда вы используете пользовательские охранник. Разные охранники перенаправляют неаутентифицированных пользователей на другой маршрут.
здесь быстрый обходной путь, основанный на ответе Джона (он работает для меня).
app/http/Middleware/Authenticate.php
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Auth\Middleware\Authenticate as Middleware;
class Authenticate extends Middleware
{
/**
* @var array
*/
protected $guards = [];
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string[] ...$guards
* @return mixed
*
* @throws \Illuminate\Auth\AuthenticationException
*/
public function handle($request, Closure $next, ...$guards)
{
$this->guards = $guards;
return parent::handle($request, $next, ...$guards);
}
/**
* Get the path the user should be redirected to when they are not authenticated.
*
* @param \Illuminate\Http\Request $request
* @return string
*/
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
if (in_array('admin', $this->guards)) {
return route('admin.login');
}
return route('login');
}
}
}
Источник: выпуск № 26292
Ответ 14
Решение простое!
перейти к файлу: config/auth.php
идентифицировать этот блок кода:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
и изменить на:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],