React Native fetch, получая пустой массив при отправке запроса POST в Laravel Api

Я работаю над проектом для самообучения, в котором есть laravel в бэкэнде и запущенный react native во фронтэнде. Я реализовал экран входа и регистрации для своих приложений. Теперь я пытаюсь подключить его к моему серверу laravel через его маршруты api. Сначала у меня возникла проблема с CORS, поэтому я решил ее, создав новое промежуточное ПО и отредактировав файл kernel.php, как указано в этой теме.

Проблема CORS с приложением React и Laravel API

Теперь я попытался сначала запустить несколько тестов с запросом на получение, моя функция отправки в реакции

handleSubmit = async() => {
const email  = this.state.email
const pass = this.state.password

const proxyurl = "https://cors-anywhere.herokuapp.com/";
/*TEST FOR GET REQUEST */
let response = await fetch(`http://mobileprediction/api/user?email=${email}&pass=${pass}`, {
  headers: {
     "Content-Type" : "application/json",
     "Accept" : "application/json"
   },

})


let result = await response.json()
console.log(result)
}

и мой файл api.php в маршрутах laravel был

Route::get("/user", function (Request $request) {
  return $request;
});

и он дал желаемый результат, но затем, когда я тестировал то же самое с почтовым запросом, я получаю пустой массив, несмотря ни на что, и я не могу понять, в чем проблема

функция handlesubmit в моем приложении для реагирования

handleSubmit = async() => {
const email  = this.state.email
const pass = this.state.password


/*TEST FOR POST REQUEST */
 let response = await fetch(`http://mobileprediction/api/user`, {
   method: "POST",
   header : {
     "Content-Type" : "application/json",
     "Accept" : "application/json"
   },
   body : JSON.stringify({
     emailid : email,
     password : pass
   }),
 })

let result = await response.json()
console.log(result)
}

а файл api.php в laravel - это

Route::get("/user", function (Request $request) {
  return $request;
});

Route::post("/user", function(Request $request) {
  return $request;
});

2 ответа

Решение

Итак, я понял, что из запроса на выборку в react native он отправляет не только входные данные, а скорее страницу с телом, которое имеет значения ключей в формате json. Поэтому я не могу получить доступ к данным на моем сервере как

$request->param 

или с

request("param")

вы можете получить строку в формате json с помощью

$request->json()->all()

но все же я не мог добраться до отдельных значений

для меня то, что работало, - это получить все содержимое, а затем получить доступ к значениям с помощью

$postInput = file_get_contents('php://input');
   $data = json_decode($postInput, true);
   return ["email" => $data["emailid"] ];

Я думаю, вы пишете свои маршруты в web.php, поскольку ваш API может записывать конечные точки в api.php.

Попробуйте прокомментировать VerifyCsrfToken промежуточное ПО в app/Http/Kenrel.php. у него есть проблема с безопасностью, но вы можете сделать это на этапах обучения.

[ https://laravel.com/docs/6.x/routing ] [поиск CSRF по этой ссылке]

Любые маршруты, указывающие на маршруты POST, PUT или DELETE, которые определены в файле веб-маршрутов, должны включать поле токена CSRF.

Другие вопросы по тегам