【问题标题】:Laravel unauthenticated handler is not called未调用 Laravel 未经身份验证的处理程序
【发布时间】:2017-09-04 23:58:10
【问题描述】:

我在我的 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。

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

您对这个问题有任何经验吗? 谢谢

【问题讨论】:

    标签: php laravel authentication laravel-5.3


    【解决方案1】:

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

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

    以下是上面正确的 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');
    });
    

    【讨论】:

    • 感谢您的回复。但不幸的是,它不起作用。结果是一样的。此外,我没有编辑核心处理程序,它位于 app 文件夹下,在那里编辑未经身份验证的重定向是安全的。而且我认为它与路由无关,因为它适用于本地和开发服务器。
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 2020-11-16
    • 2015-05-19
    • 2018-04-26
    • 2020-12-14
    相关资源
    最近更新 更多