For user registration, I have an EventSubscriber to encode password, generate confirmation token and finally to send email confirmation to the user.
This works fine in REST but not at all in graphql.
Searching in this repository I found a couple of issues related to this, including this one, but it is not clear to me the current status.
It seems to have been merged but the issue is present on my installation with
"api-platform/api-pack": "^1.2",.
This is the code in case of need:
<?php
namespace App\EventSubscriber;
use App\Entity\User;
use App\Email\Mailer;
use App\Security\TokenGenerator;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use ApiPlatform\Core\EventListener\EventPriorities;
use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\HttpFoundation\Request;
class UserRegisterSubscriber implements EventSubscriberInterface
{
/**
* @var UserPasswordEncoderInterface
*/
private $passwordEncoder;
/**
* @var TokenGenerator
*/
private $tokenGenerator;
/**
* @var Mailer
*/
private $mailer;
public function __construct(
UserPasswordEncoderInterface $passwordEncoder,
TokenGenerator $tokenGenerator,
Mailer $mailer
)
{
$this->passwordEncoder = $passwordEncoder;
$this->tokenGenerator = $tokenGenerator;
$this->mailer = $mailer;
}
public static function getSubscribedEvents()
{
return [
KernelEvents::VIEW => ['userRegistered', EventPriorities::PRE_WRITE],
];
}
public function userRegistered(GetResponseForControllerResultEvent $event)
{
$user = $event->getControllerResult();
$method = $event->getRequest()->getMethod();
if (!$user instanceof User ||
!in_array($method, [Request::METHOD_POST])) {
return;
}
$user->setPassword(
$this->passwordEncoder->encodePassword($user, $user->getPassword())
);
// Create confirmation token
$user->setConfirmationToken(
$this->tokenGenerator->getRandomSecureToken()
);
// Send e-mail here...
$this->mailer->sendConfirmationEmail($user);
}
}
For user registration, I have an
EventSubscriberto encode password, generate confirmation token and finally to send email confirmation to the user.This works fine in
RESTbut not at all ingraphql.Searching in this repository I found a couple of issues related to this, including this one, but it is not clear to me the current status.
It seems to have been merged but the issue is present on my installation with
"api-platform/api-pack": "^1.2",.This is the code in case of need: