我在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。
你对这个问题有经验吗? 谢谢
答案 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');
});