Ответ маршрута Laravel защищенный API возвращает HTML вместо JSON - PullRequest
0 голосов
/ 09 декабря 2018

Я создал приложение Laravel / React, используя аутентификацию на основе токенов из этого источника: https://medium.com/@Gbxnga/token-based-authentication-with-react-and-laravel-restful-api-83f16581e85 Но каждый раз, когда я пытаюсь извлечь данные из защищенного ресурса, я получаю HTML как ответ вместо JSON.

Я использовал их промежуточное ПО для защиты своих вызовов API.Это jwtMiddleware:

    public function handle($request, Closure $next)
    {
        try {
            $user = JWTAuth::toUser($request->input('token'));
        } catch (Exception $e) {
            if ($e instanceof TokenInvalidException){
//                return $next($request);
                return response()->json(['error'=>'Token is Invalid']);
            }else if ($e instanceof TokenExpiredException){
//                return $next($request);
                return response()->json(['error'=>'Token is Expired']);
            }else{
//                return $next($request);
                return response()->json(['error'=>'Something is wrong']);
            }
        }
        return $next($request);
    } 

API:

public function handle($request, Closure $next)
{
    $response = $next($request);
    $response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Content-Range, Content-Disposition, Content-Description, X-Auth-Token');
    $response->header('Access-Control-Allow-Origin', '*');
    //add more headers here
    return $response;
}

В моих маршрутах API у меня есть это для моих вызовов защищенного API:

Route::group(['middleware' => ['jwt.auth','api-header']], function () {

    // all routes to protected resources are registered here
    Route::get('users/list', function(){
        $users = App\User::all();

        $response = ['success'=>true, 'data'=>$users];
        return response()->json($response, 201);
    });

});

И в этой функцииЯ пытаюсь получить список пользователей, как они сделали на сайте:

   componentDidMount() {
        const token = localStorage.getItem('jwtToken');
        axios.get(`http://127.0.0.1:8000/api/user/list?token=${token}`)
            .then(response => {
                console.log(response);
                return response;
            })
            .then(json => {
                if (json.data.success) {
                    alert("Login Successful!");
                } else alert("Login Failed!");
            })
            .catch(error => {
                alert(`An Error Occured! ${error}`);
            });
    }

Но мой ответ дает мне следующее:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="msapplication-TileColor" content="#da532c">
    <meta name="theme-color" content="#db5945">
    <meta name="csrf-token" content="bxHaQn6jmnsoAkW7OQ8OVY9pPVy9VgpPJurFyzYS">

    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
    <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
    <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5">
    <link rel="manifest" href="manifest.json" >
    <link href="/css/app.css" rel="stylesheet" type="text/css">
    <link href="/css/all.css" rel="stylesheet" type="text/css">

    <title>Application Name</title>

</head>
<body>
<div id="root"></div>
<script src="/js/app.js"></script>
</body>

</html>

Может кто-нибудь объяснить мне, почему я получаю мойHTML-страница в качестве ответа вместо ответа JSON, который я отправляю обратно?Я проверил, является ли токен аутентификации JWT таким же, как в базе данных, когда я вхожу, и он точно такой же.Так что не должно быть из-за плохого жетона.

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