Laravel Паспорт для возврата ошибки 403 вместо маршрута ('логин') - PullRequest
1 голос
/ 27 апреля 2020

Я пытаюсь получить Laravel Паспорт, чтобы дать клиентам ответ 403 вместо route('login'), когда они пытаются получить доступ к ресурсу через REST с недействительным токеном авторизации.

Это мое route/api.php

Route::middleware(['auth:api'])->group(function () {
    Route::prefix('invoices')->group(function () {
        Route::post('', 'API\InvoiceController@create');
    });
});

И это мое app/Http/Middleware/Authenticate.php

namespace App\Http\Middleware;

use Illuminate\Auth\Middleware\Authenticate as Middleware;

class Authenticate extends Middleware
{
    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string
     */
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            //return route('login');
            return response()->json([],403);
        }
    }
}

Однако redirectTo выдает ошибку Header may not contain more than a single header, new line detected.

Я не уверен, где установить мой 403 ответ?

Я использую Laravel 5.8.

1 Ответ

1 голос
/ 27 апреля 2020

Чтобы преобразовать исключение аутентификации в ответ без аутентификации, вы можете переопределить метод unauthenticated в / app / Exceptions / Handler. php.

<?php

namespace App\Exceptions;

use Illuminate\Auth\AuthenticationException;
// ...

class Handler extends ExceptionHandler
{
    // ...

    /**
     * Convert an authentication exception into an unauthenticated response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Illuminate\Auth\AuthenticationException  $exception
     * @return \Illuminate\Http\Response
     */
    protected function unauthenticated($request, AuthenticationException $exception)
    {
        return response()->json(['error' => 'my custom message.'], 403);
    }
}
...