Laravel 5.5 更改未经身份验证的登录重定向 url

新手上路,请多包涵

Laravel < 5.5 我可以更改此文件 app/Exceptions/Handler 以更改未经身份验证的用户重定向 url:

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

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

但是在 Laravel 5.5 这已经被移动到这个位置 vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php 那么我现在如何改变它呢?我不想更改供应商目录中的内容,以免它被作曲家更新覆盖。

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

原文由 Rob 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 302
2 个回答

但在 Laravel 5.5 中,它已移至此位置 vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php 那么我现在该如何更改它呢?我不想更改供应商目录中的内容,以免它被作曲家更新覆盖。

只是默认情况下该功能不再存在。

您可以像在 5.4 中那样覆盖它。只要确保包括

use Exception;
use Request;
use Illuminate\Auth\AuthenticationException;
use Response;

在处理程序文件中。

例如我的 app/Exceptions/Handler.php 看起来有点像这样:

 <?php
    namespace App\Exceptions;
    use Exception;
    use Request;
    use Illuminate\Auth\AuthenticationException;
    use Response;
    use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
    class Handler extends ExceptionHandler
    {
        (...) // The dfault file content
        /**
         * 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' => 'Unauthenticated.'], 401)
                    : redirect()->guest(route('authentication.index'));
    }
}

原文由 Seb. Kra. 发布,翻译遵循 CC BY-SA 3.0 许可协议

这就是我解决它的方法。在渲染函数中,我捕获了异常类。如果它是身份验证异常类,我会编写用于重定向的代码(我将在以前版本的未验证函数中编写的代码)。

 public function render($request, Exception $exception)
{
    $class = get_class($exception);

    switch($class) {
        case 'Illuminate\Auth\AuthenticationException':
            $guard = array_get($exception->guards(), 0);
            switch ($guard) {
                case 'admin':
                    $login = 'admin.login';
                    break;
                default:
                    $login = 'login';
                    break;
            }

            return redirect()->route($login);
    }

    return parent::render($request, $exception);
}

原文由 Milomir 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏