Реагируйте на собственную выборку, получая пустой массив при выполнении запроса POST к Laravel Api - PullRequest
0 голосов
/ 23 февраля 2020

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

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

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

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 ]

0 голосов
/ 28 февраля 2020

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

$request->param 

или с помощью

request("param")

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

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

, но все же Я не мог получить отдельные значения

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

$postInput = file_get_contents('php://input');
   $data = json_decode($postInput, true);
   return ["email" => $data["emailid"] ];
0 голосов
/ 23 февраля 2020

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

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

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

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

...