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'));
}
Ответы
Ответ 1
Но в 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'));
}
}
Ответ 2
Но в Laravel 5.5 это перемещено в это место продавец/Laravel/рамки/SRC/Осветите/Foundation/исключения/handler.php так как я могу изменить его сейчас? Я не хочу менять вещи в поставщике directory encase, он становится переопределенным с помощью обновлений композитора.
Нам нужно просто включить
используйте Illuminate\Auth\AuthenticationException;
а затем он работает как в laravel 5.4
Ответ 3
Вот как я это решил.
В функции render я поймал класс исключения. И в случае, если это класс исключения аутентификации, я написал свой код для перенаправления (код, который я бы написал в не прошедшей проверку в предыдущей версии функции).
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);
}
Ответ 4
Кроме overriding
, вы можете напрямую вносить изменения в Handler.php
в существующую функцию неаутентифицированной, расположенной в vendor/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)
{
$guard = array_get($exception->guards(),0);
switch ($guard) {
case 'admin':
return $request->expectsJson()
? response()->json(['message' => $exception->getMessage()], 401)
: redirect()->guest(route('admin.login'));
break;
default:
return $request->expectsJson()
? response()->json(['message' => $exception->getMessage()], 401)
: redirect()->guest(route('login'));
break;
}
}
Ответ 5
Просто добавьте маршрут для входа в файл маршрутов:
Route::get('/login', [
'uses' => '[email protected]',
'as' => 'login'
]);
Ответ 6
1. Вернитесь к файлу vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php
.
2.Поиск имени метода unauthenticated
.
3. И измените URL-адрес перенаправления с
redirect()->guest(route('login'))
до redirect()->guest(route('api/login')) //whatever you want
.
Вы можете вернуть ответ как JSON, если это API-сервисы.