欢迎光临
我们一直在努力

Laravel 提示Route [login] not defined.错误

laravel访问需要登陆的页面,如果当前未登陆,出现如下错误:

Route [login] not defined.

起初以为是auth中间件使用过程中哪儿出错了,最后找到错误提示的原因

错误原因:

我们通过错误提示排查错误出现的原因:

1、在vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php文件中,我们可以看到未登录用户跳转:redirect()->guest(route(‘login’)

protected function unauthenticated($request, AuthenticationException $exception)
{
    return $request->expectsJson() ? response()->json(['message' => $exception->getMessage()], 401) : redirect()->guest(route('login'));
}

2、在vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php文件里route方法中发现$this->routes->getByName($name)通过路由名查找路由。

    public function route($name, $parameters = [], $absolute = true)
    {
        if (! is_null($route = $this->routes->getByName($name))) {
            return $this->toRoute($route, $parameters, $absolute);
        }

        throw new RouteNotFoundException("Route [{$name}] not defined.");
    }

通过以上两个地方,我们发现$this->routes->getByName($name)这儿是导致错误的关键点。原来是我们定义路由时并未定义路由名(name),因而出现如题错误。

解决办法:

1、方法一:修改项目源码

找到项目源码vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php修改如下方法中route('login')的地址:

protected function unauthenticated($request, AuthenticationException $exception)
{
    return $request->expectsJson() ? response()->json(['message' => $exception->getMessage()], 401) : redirect()->guest(route('login'));
}

或者修改为如下跳转方式:

protected function unauthenticated($request, AuthenticationException $exception)
{
    return $request->expectsJson() ? response()->json(['message' => $exception->getMessage()], 401) : redirect('admin/login');
}

2、方法二:增加login路由

web.php中给你的Login登录路由设置login名字:

Route::group(['prefix' => 'admin'], function () {

    Route::get('/login', '\App\Http\Controllers\Admin\LoginController@index')->name('login');
    Route::post('/login', '\App\Http\Controllers\Admin\LoginController@login');
    Route::get('/logout', '\App\Http\Controllers\Admin\LoginController@logout')->name('logout');

    Route::group(['middleware' => 'auth:admin'], function () {
        // 后台首页
        Route::get('/home', '\App\Http\Controllers\Admin\HomeController@index');
    });

});
赞(0)
版权归原作者所有,如有侵权请告知。达维营-前端网 » Laravel 提示Route [login] not defined.错误

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址