Я реализовал простой API с функцией входа в систему, используя FOSUserBundle и JWT (используя LexikJWTAuthenticationBundle). Все работает хорошо, я могу войти в систему и получить токен jwt. Но когда я создал конечную точку API для получения сведений о пользователе, в ответе также отправляется поле пароля.
Мой метод контроллера для получения сведений о пользователе выглядит так:
/**
* @Route("/get/{id}", name="api_auth_get_user_by_id", methods={"GET"})
*
* @param Request $request
* @param UserManagerInterface $userManager
*
* @return JsonResponse|\Symfony\Component\HttpFoundation\RedirectResponse
*/
public function getById(SystemUser $user)
{
return $this->handleView($this->view($user));
}
Моя пользовательская сущность выглядит так:
<?php
namespace App\Entity\Api\Auth;
use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;
/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class SystemUser extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function __construct()
{
parent::__construct();
// your own logic
}
}
Итак, как вы можете видеть, моя сущность SystemUser
простирается от сущности BaseUser
, которая находится в FOSUserBundle
.
Вот как выглядит ответ JSON, когда я получаю данные пользователя из API:
{
"id": 1,
"username": "test",
"username_canonical": "test",
"email": "[email protected]",
"email_canonical": "[email protected]",
"enabled": true,
"password": "$2y$13$DnyFxYyJXQe3Z7chsJYwe.LUsuOWPqBtFm5.O0vwldX5AoMGld9ca",
"last_login": "2019-08-27T06:19:43-04:00",
"groups": [],
"roles": []
}
Итак, как я могу исключить свойство пароля из ответа. Я использую последнюю версию Symfony 4.3. Я знаю, что в более ранних версиях Symfony вы могли создать конфигурацию сериализатора jms для каждого объекта в вашем пакете, но в Symfony 4 многое изменилось, и теперь использование пакетов не обязательно, и я не использую пакет для этого простого приложения.