【问题标题】:Laravel automaticly redirect on authentication exceptionLaravel 在身份验证异常时自动重定向
【发布时间】:2018-05-09 09:14:12
【问题描述】:

我正在使用 laravel 5.5 并试图保护 api 路由。我将“auth”中间件分配给此路由,但是当我测试它时,我得到一个 InvalidArgumentException aka 'Route [login] is not defined'。我没有以任何方式引用这条路线,laravel 自动尝试重定向到这条路线。我在文件 'laravel\framework\src\Illuminate\Foundation\Exceptions\Handler.php' 中找到了以下代码行:

/*
 * Convert an authentication exception into a response.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Illuminate\Auth\AuthenticationException  $exception
 * @return \Illuminate\Http\Response
 */
protected function unauthenticated($request, AuthenticationException $exception)
{
    return $request->expectsJson()
                ? response()->json(['message' => $exception->getMessage()], 401)
                : redirect()->guest(route('login'));
}

所以我想知道,在每条路线上全局捕获此异常的最佳方法是什么?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    据我了解,这是因为您在路由中添加了 auth 中间件。因此,每当在没有身份验证的情况下访问路由时,路由都会重定向到默认登录页面name login route

    您可以使用以下代码将unauthenticated 方法添加到您的app/Exceptions/Handler.php。因此,如果请求在API 中或期待JSON 响应,它将给出带有JSON 响应的401 状态代码。如果使用 web 路由访问该路由,它将被重定向到默认页面。在下面的示例中,我将其重定向到登录页面。

    注意:这个方法存在于 app/Exceptions/Handler.php 直到 laravel 5.4。

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

    别忘了导入use Illuminate\Auth\AuthenticationException;

    编辑:错误Route [login] is not defined 的解释。这是因为 laravel 试图重定向到 named route。如果您使用laravel auth scaffolding,则此命名路由可用。如果是手动创建函数,即使路由login存在,也应该命名为login。欲了解更多信息,请参阅https://laravel.com/docs/5.5/routing#named-routes

    【讨论】:

      猜你喜欢
      • 2021-01-12
      • 2019-09-18
      • 2016-04-03
      • 2019-09-10
      • 2016-04-02
      • 2016-05-13
      • 2017-12-24
      • 2022-01-24
      • 1970-01-01
      相关资源
      最近更新 更多