#php #rest #symfony #postman #restful-authentication
#php #rest #symfony #почтальон #restful-аутентификация
Вопрос:
Я пытаюсь добавить заказ для панели клиента с аутентификацией JWT. Я активировал авторизацию, добавил параметры в теле в Postman и отправил его, но «статус»: 422,»ошибки»: «Заказ недействителен»} выдает это сообщение, а файл dev.log находится ниже.
[2020-08-24T10:31:01.791369 02:00] request.INFO: Matched route "order_apiorders_add". {"route":"order_apiorders_add","route_parameters":{"_route":"order_apiorders_add","_controller":"App\Controller\OrderController::addOrder"},"request_uri":"http://localhost:8000/api/orders","method":"POST"} []
[2020-08-24T10:31:01.823528 02:00] security.DEBUG: Checking for guard authentication credentials. {"firewall_key":"api","authenticators":1} []
[2020-08-24T10:31:01.823621 02:00] security.DEBUG: Checking support on guard authenticator. {"firewall_key":"api","authenticator":"Lexik\Bundle\JWTAuthenticationBundle\Security\Guard\JWTTokenAuthenticator"} []
[2020-08-24T10:31:01.823697 02:00] security.DEBUG: Calling getCredentials() on guard authenticator. {"firewall_key":"api","authenticator":"Lexik\Bundle\JWTAuthenticationBundle\Security\Guard\JWTTokenAuthenticator"} []
[2020-08-24T10:31:01.836138 02:00] security.DEBUG: Passing guard token information to the GuardAuthenticationProvider {"firewall_key":"api","authenticator":"Lexik\Bundle\JWTAuthenticationBundle\Security\Guard\JWTTokenAuthenticator"} []
[2020-08-24T10:31:01.937527 02:00] doctrine.DEBUG: SELECT t0.id AS id_1, t0.username AS username_2, t0.password AS password_3 FROM user t0 WHERE t0.username = ? LIMIT 1 ["admin"] []
[2020-08-24T10:31:01.949440 02:00] security.INFO: Guard authentication successful! {"token":{"Lexik\Bundle\JWTAuthenticationBundle\Security\Authentication\Token\JWTUserToken":"JWTUserToken(user="admin", authenticated=true, roles="ROLE_USER")"},"authenticator":"Lexik\Bundle\JWTAuthenticationBundle\Security\Guard\JWTTokenAuthenticator"} []
[2020-08-24T10:31:01.950400 02:00] security.DEBUG: Guard authenticator set no success response: request continues. {"authenticator":"Lexik\Bundle\JWTAuthenticationBundle\Security\Guard\JWTTokenAuthenticator"} []
[2020-08-24T10:31:01.950461 02:00] security.DEBUG: Remember me skipped: it is not configured for the firewall. {"authenticator":"Lexik\Bundle\JWTAuthenticationBundle\Security\Guard\JWTTokenAuthenticator"} []
[2020-08-24T10:31:01.966109 02:00] doctrine.DEBUG: "START TRANSACTION" [] []
[2020-08-24T10:31:01.967877 02:00] doctrine.DEBUG: INSERT INTO order (product_id, quantity, address, shipping_date, user_id) VALUES (?, ?, ?, ?, ?) {"1":1,"2":1,"3":"Levent","4":20,"5":32} []
[2020-08-24T10:31:01.971845 02:00] doctrine.DEBUG: "ROLLBACK" [] []
У меня есть два класса сущностей, которые являются User и Order, а переменными пользователя являются «username, password,orders (переменная orders имеет отношение OneToMany и mappedBy =»user»). Переменными заказа являются «ProductID, количество, адрес, дата отправки и пользователь (пользователь имеет отношение ManyToOne и inversedBy =»заказы»)
Моя функция addOrder приведена ниже,
/**
* @param Request $request
* @param TokenStorageInterface $tokenStorage
* @return JsonResponse
* @Route("/orders", name="orders_add", methods={"POST"})
*/
public function addOrder(Request $request,TokenStorageInterface $tokenStorage)
{
$entityManager = $this->getDoctrine()->getManager();
try{
$request = $this->transformJsonBody($request);
if (!$request || !$request->request->get('productId') || !$request->request->get('quantity') || !$request->request->get('address') || !$request->request->get('shippingDate')){
throw new Exception();
}
$user = $tokenStorage->getToken()->getUser();
$order = new Order();
$order->setProductId($request->get('productId'));
$order->setQuantity($request->get('quantity'));
$order->setAddress($request->get('address'));
$order->setShippingDate($request->get('shippingDate'));
$order->setUser($user);
$entityManager->persist($order);
$entityManager->flush();
$data = [
'status' => 200,
'success' => "Order added successfully",
];
return $this->response($data);
}catch (Exception $e){
$data = [
'status' => 422,
'errors' => "Order no valid",
];
return $this->response($data, 422);
}
}
Кроме того, ссылка на репозиторий github являетсяhttps://github.com/Berkayermis/RESTfulService
Я прочитал много статей и поговорил со многими людьми, но я изучаю REST API с прошлого месяца, и я очень новичок в этой теме, но я хочу ее изучить.
Спасибо
Комментарии:
1. поскольку у вас возникло исключение, рассматривали ли вы возможность его регистрации или вывода?!!! может быть, в этом есть что-то вроде «ОШИБКА MYSQL blablabla»
2. То, что сказал @ Jakumi выше. Эмпирическое правило: всякий раз, когда вы обнаруживаете неизвестное исключение, регистрируйте его с помощью
$logger->critical(....)
. Вы поблагодарите себя позже…3. Здравствуйте, я сделал это, и появляется это сообщение об ошибке: «errorInfo»: [ «42000», 1064, » У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса, который следует использовать рядом со ЗНАЧЕНИЯМИ ‘order (product_id, количество, адрес, shipping_date, user_id) (1, 1, ‘…’ в строке 1″]