#jwt #api-platform.com #symfony5 #lexikjwtauthbundle
Вопрос:
Я работаю с Api-платформой и попытался ввести своего пользователя, аутентифицированного в объекте, для запроса post.
Моя проблема в том, что при отправке моего пользователя в объект:
obj-gt;setUser($this-gt;security-gt;getUser());
Мне нужен пароль, и у меня ошибка:
An exception occurred while executing a query: SQLSTATE[23000]: Integrity constraint violation: 1048 Le champ 'password' ne peut être vide (null)
Я аутентифицировал своего пользователя с помощью токена JWT и создал своего пользователя в createFromPayload()
(JWTUserInterface)
public static function createFromPayload($username, array $payload) { $user = new User(); $user-gt;setId($username)-gt;setEmail($payload['username'] ?? ''); $user-gt;setRoles($payload['roles']); return $user; }
Я отлаживаю свой объект пользователя, и это логично, что мой пароль равен нулю, но как назначить моего пользователя в моем объекте, если пароль равен нулю?
^ AppEntityUser {#13193 -id: 8 -email: "test@test.fr" -roles: array:1 [ 0 =gt; "ROLE_USER" ] -password: null -wallets: DoctrineCommonCollectionsArrayCollection {#13417 -elements: [] } }
Мой класс : UserOwnedDenormalizer
class UserOwnedDenormalizer implements ContextAwareDenormalizerInterface, DenormalizerAwareInterface { use DenormalizerAwareTrait; private const ALREADY_CALLED_DENORMALIZE = 'UserOwnedDenormalizer'; public function __construct(private UserRepository $userRepository, private Security $security) { } public function supportsDenormalization($data, string $type, ?string $format = null, array $context = []) { $reflectionClass = new ReflectionClass($type); $alreadyCalled = $context[self::ALREADY_CALLED_DENORMALIZE] ?? false; return $reflectionClass-gt;implementsInterface(UserOwnedInterface::class) amp;amp; $alreadyCalled === false; } public function denormalize($data, string $type, ?string $format = null, array $context = []) { $context[self::ALREADY_CALLED_DENORMALIZE] = true; /** @var UserOwnedInterface $obj */ $obj = $this-gt;denormalizer-gt;denormalize($data, $type, $format, $context); $obj-gt;setUser($this-gt;security-gt;getUser()); return $obj; } }
Моя цель состоит в том, чтобы назначить пользователя в объекте, не проходя мимо Доктрины и моей базы данных.