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

2022-08-30 11:51:22

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

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

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

但是在这个已经移动到这个位置,所以我现在如何改变它?我不想更改供应商目录中的内容,以防它被作曲家更新覆盖。Laravel 5.5vendor/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'));
}

答案 1

但是在Laravel 5.5中,这已经移动到这个位置供应商/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'));
    }
}

答案 2

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

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);
}

推荐