Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Controller;
- use App\Entity\User;
- use FOS\RestBundle\View\View;
- use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface;
- use Psr\Container\ContainerExceptionInterface;
- use Psr\Container\NotFoundExceptionInterface;
- use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\HttpFoundation\Response;
- use Symfony\Component\Routing\Annotation\Route;
- use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
- use FOS\RestBundle\Controller\Annotations as Rest;
- use Symfony\Component\Validator\ConstraintViolation;
- use Symfony\Component\Validator\Validator\ValidatorInterface;
- class ApiController extends AbstractController
- {
- private $passwordEncoder;
- public function __construct(UserPasswordEncoderInterface $passwordEncoder){
- $this->passwordEncoder = $passwordEncoder;
- }
- /**
- * @Route("/api/auth", name="auth", methods={"POST"})
- */
- public function auth()
- {
- }
- /**
- * Creates an User
- * @Rest\Post("/api/register")
- * @param Request $request
- * @return View
- */
- public function postRegister(Request $request, JWTTokenManagerInterface $JWTManager, ValidatorInterface $validator): View
- {
- //проверка валидности email и существования такого пользователя в БД
- $user = new User();
- $user->setEmail($request->get('email'));
- $requestedPassword = $request->get('password');
- if (\strlen($requestedPassword) < 6) {
- return View::create(['errors' => ['Password can\'t be shorter than 6 chars']], Response::HTTP_BAD_REQUEST);
- }
- $password = $this->passwordEncoder->encodePassword(
- $user,
- $requestedPassword
- );
- $user->setPassword($password);
- $violations = $validator->validate($user);
- if (\count($violations) > 0) {
- /**
- * @var $violation ConstraintViolation
- */
- foreach ($violations as $violation){
- $errors[] = $violation->getMessage();
- }
- return View::create(['errors' => $errors], Response::HTTP_BAD_REQUEST);
- }
- $entityManager = $this->getDoctrine()->getManager();
- $entityManager->persist($user);
- $entityManager->flush();
- $response['token'] = $JWTManager->create($user);
- $response['roles'] = $user->getRoles();
- // In case our POST was a success we need to return a 201 HTTP CREATED response
- return View::create($response, Response::HTTP_CREATED);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement