Возвращать JSON-ответ вместо 401-файла Blade - PullRequest
0 голосов
/ 27 февраля 2019

Я использую AuthBasic для аутентификации API в проекте Laravel, у меня возникает такая проблема: когда аутентификация запроса API недопустима вместо отображения ответа JSON, он возвращает шаблон представления блэйда по умолчанию 401.

Здеськод:

app \ Http \ Middleware \ AuthBasic.php

public function handle($request, Closure $next)
{   
    if (Auth::onceBasic()) {
        return response()->json(["message", "Authentication Required!"], 401);
    } else {
        return $next($request);
    }
}

Ответы [ 4 ]

0 голосов
/ 02 марта 2019

Нашли решение:

app \ Exceptions \ Handler.php

public function render($request, Exception $exception)
{   
    if ($request->is('api/*') || $request->wantsJson())
    {
        $json = [
            'success' => false,
            'error' => [
                'code' => $exception->getCode(),
                'message' => $exception->getMessage(),
            ],
        ];
        return response()->json($json, 401);
    }
    return parent::render($request, $exception);
}
0 голосов
/ 01 марта 2019

Возможно, это решит вашу проблему!

public function handle($request, Closure $next)
{   
    $result = Auth::onceBasic();

    if($result === 401)
        return response()->json(["message", "Authentication Required!"]);
    else
        return $next($request);
}
0 голосов
/ 01 марта 2019

Итак, вот половина решения этой проблемы:

vendor \ laravel \ framework \ src \ Illuminate \ Auth \ SessionGuard.php

    public function onceBasic($field = 'email', $extraConditions = [])
{
    $credentials = $this->basicCredentials($this->getRequest(), $field);

    if (! $this->once(array_merge($credentials, $extraConditions))) {
        //return $this->failedBasicResponse();
        return response()->json(["Message" => "Authentication Required!"], 401);
    }
}

ИтакВместо возврата ответа Failed Basic будет возвращено сообщение JSON, но я не хочу вносить изменения в базовые файлы Laravel, потому что в случае обновления они будут потеряны!

Итак, любая идея?

0 голосов
/ 27 февраля 2019

Удалите 401 или измените его на 200 из этой строки:

return response()->json(["message", "Authentication Required!"], 401);

См. Ссылку, второй параметр определяет http-код для отправки в браузер.[401] в твоем случае.https://laravel.com/api/5.7/Illuminate/Routing/ResponseFactory.html#method_json

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...