Laravel 5.5路由报错:InvalidArgumentException Route [login]未定义
解决Laravel 5.5中“Route [login] not defined”错误
这个问题的核心原因是Laravel的认证系统默认依赖名为login的路由来跳转未认证请求,但你的登录路由/signin并没有设置这个名称,或者你没有正确使用自己自定义的认证中间件。下面提供两种可行的解决方法:
方法一:给登录路由添加login名称(推荐,符合框架规范)
Laravel的认证组件(包括默认的auth中间件)会通过route('login')来生成登录页面的跳转链接,所以你只需要给/signin路由加上名称即可:
修改web.php中的登录路由:
Route::get('/signin', 'signinController@index')->name('login');
这样框架就能找到对应的登录路由,错误自然就消失了。这种方法的好处是,后续如果用到密码重置等Laravel自带的认证功能,也能正常工作,因为它们都依赖这个login路由名称。
方法二:确保使用你自定义的认证中间件
如果你想继续使用自己写的Authenticate中间件(跳转到/signin),需要确保路由中使用的是你自定义的中间件,而不是框架默认的auth中间件:
- 注册自定义中间件
打开app/Http/Kernel.php,在$routeMiddleware数组中添加你的自定义中间件:
protected $routeMiddleware = [ // ... 其他中间件 'custom-auth' => \App\Http\Middleware\Authenticate::class, ];
- 替换路由中的中间件
把所有需要认证的路由里的->middleware('auth')替换成->middleware('custom-auth'),比如:
// 原路由 Route::get('/logout', ['uses'=>'signinController@logout'])->middleware('auth'); // 修改后 Route::get('/logout', ['uses'=>'signinController@logout'])->middleware('custom-auth'); // 其他需要认证的路由同理替换
这样系统就会使用你自己写的中间件逻辑,直接跳转到/signin,不会再去寻找login路由。
额外检查
确认你的自定义Authenticate中间件文件位于app/Http/Middleware目录下,并且命名空间正确:
namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth; class Authenticate { public function handle($request, Closure $next) { if(Auth::check()){ // 规范写法为小写check(),不影响功能但更符合代码规范 return $next($request); } else{ return redirect('/signin'); } } }
内容的提问来源于stack exchange,提问作者Kenny Nataniel
相关产品推荐
相关产品推荐

