Я создал приложение 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 таким же, как в базе данных, когда я вхожу, и он точно такой же.Так что не должно быть из-за плохого жетона.