未调用Laravel未经身份验证的处理程序

时间:2017-04-10 03:55:22

标签: php laravel authentication laravel-5.3

我在Laravel应用程序中发现了一个奇怪的行为。

我有这样的路线:

Route::group(['as' => 'web', 'middleware' => ['web']], function()
{
    Route::group(['middleware'=>['auth']], function() {
        Route::get('personal', 'Web\MyController@personal');
    }
}

在我的app / Exceptions / Handler.php中,我定义了未经身份验证的函数,如下所示:

protected function unauthenticated($request, AuthenticationException $exception)
{
    if ($request->expectsJson()) {
        return response()->json(['error' => 'Unauthenticated.'], 401);
    }

    return redirect()->guest('login');
}

因此,当用户未经过身份验证并使用auth中间件命中路由时,它应该重定向到/ login。

这适用于本地和开发服务器。但在生产服务器中,它永远不会被调用。我尝试在dd()render函数中unauthenticated,但它从未调用过。 因此,在生产服务器上,如果未经身份验证的用户使用auth中间件命中路由,则它将始终重定向到/ auth而不是/ login。

你对这个问题有经验吗? 谢谢

1 个答案:

答案 0 :(得分:0)

你应该尽量不要修改核心处理程序,

在这种情况下,您的路由文件不应使用嵌套路由。

以下是适用于上述

的web.php路由的一些示例
Route::group(['middleware' => ['web']], function() {

});

Route::group(['middleware' => ['auth']], function() {
    Route::get('personal', 'Web\MyController@personal');
});

Route::group(['middleware' => ['web', 'auth']], function() {
    Route::get('personal', 'Web\MyController@personal');
});