Parcourir la source

Merge branch 'clem-connexion-insc' into 'master'

Clem connexion insc

See merge request clement.krebs/twyrael!4
KREBS-CHEVRESSON CLEMENT il y a 4 ans
Parent
commit
256dbd4b3e

+ 3 - 0
config/packages/security.yaml

@@ -1,4 +1,7 @@
 security:
+    encoders:
+        App\Entity\User:
+            algorithm: bcrypt
     # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
     providers:
         users_in_memory: { memory: null }

+ 35 - 3
src/Controller/LoginController.php

@@ -2,19 +2,29 @@
 
 namespace App\Controller;
 
+use App\Entity\User;
 use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
+use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\HttpFoundation\Session\Session;
 use Symfony\Component\Routing\Annotation\Route;
 use Symfony\Component\Form\Extension\Core\Type\TextType;
 use Symfony\Component\Form\Extension\Core\Type\PasswordType;
+use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
 
 class LoginController extends AbstractController
 {
     /**
      * @Route("/login", name="login")
      */
-    public function index(): Response
+    public function index(Request $request, UserPasswordEncoderInterface $encoder): Response
     {
+        $session = $this->get('session');
+
+        if (null !== $session->get('user')) {
+            $session->save();
+            return $this->redirectToRoute('profile', ['id' => $session->get('user')]);
+        }
 
         // $profile = new User();
 
@@ -25,13 +35,35 @@ class LoginController extends AbstractController
         $formBuilder
             ->add('identifiant', TextType::class)
             ->add('mot_de_passe', PasswordType::class)
-            ->setAction($this->generateUrl('login'));;
+            ->setAction($this->generateUrl('login'));
 
         // Génération du formulaire
         $form = $formBuilder->getForm();
 
+        if ($request->getMethod() == 'POST') {
+            $form->handleRequest($request);
+            if ($form->isValid()) {
+                $id = $form->get("identifiant")->getData();
+                $passwd = $form->get('mot_de_passe')->getData();
+                $em = $this->getDoctrine()->getManager();
+                $repository_profile = $em->getRepository(User::class);
+                $profile = $repository_profile->findOneBy(array('username' => $id));
+                if ($profile) {
+                    if ($encoder->isPasswordValid($profile, $passwd)) {
+                        $session->set('user', $id);
+                        return $this->redirectToRoute('profile', ['id' => $session->get('user')]);
+                    }
+                }
+                return $this->render('login/index.html.twig', [
+                    'message' => "Utilisateur ou mot de passe incorrect",
+                    'form' => $form->createView()
+                ]);
+            }
+        }
+
         return $this->render('login/index.html.twig', [
-            'form' => $form->createView()
+            'form' => $form->createView(),
+            'message' => ""
         ]);
     }
 }

+ 1 - 0
src/Controller/ProfileController.php

@@ -5,6 +5,7 @@ namespace App\Controller;
 use App\Entity\User;
 use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
 use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\HttpFoundation\Session\Session;
 use Symfony\Component\Routing\Annotation\Route;
 
 class ProfileController extends AbstractController

+ 46 - 6
src/Controller/RegisterController.php

@@ -2,7 +2,10 @@
 
 namespace App\Controller;
 
+use App\Entity\User;
 use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
+use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
+use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Response;
 use Symfony\Component\Routing\Annotation\Route;
 use Symfony\Component\Form\Extension\Core\Type\TextType;
@@ -10,15 +13,23 @@ use Symfony\Component\Form\Extension\Core\Type\PasswordType;
 use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
 use Symfony\Component\Form\Extension\Core\Type\TextareaType;
 use Symfony\Component\Form\Extension\Core\Type\EmailType;
+use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
 
 class RegisterController extends AbstractController
 {
     /**
      * @Route("/register", name="register")
      */
-    public function index(): Response
+    public function index(Request $request, UserPasswordEncoderInterface $encoder): Response
     {
-        // $profile = new User();
+        $session = $this->get('session');
+
+        if (null !== $session->get('user')) {
+            $session->save();
+            return $this->redirectToRoute('profile', ['id' => $session->get('user')]);
+        }
+
+        $user = new User();
 
         // Instanciation du fromBuilder
         $formBuilder = $this->createFormBuilder(); //$profile);
@@ -27,17 +38,46 @@ class RegisterController extends AbstractController
         $formBuilder
             ->add('identifiant', TextType::class)
             ->add('courriel', EmailType::class, ['required' => false])
-            ->add('mot_de_passe', PasswordType::class)
-            ->add('confirmer_le_mot_de_passe', PasswordType::class)
+            ->add('mot_de_passe', RepeatedType::class, array(
+                'type' => PasswordType::class,
+                'first_options' => array('label' => 'Mot de passe'),
+                'second_options' => array('label' => 'Répéter le mot de passe')
+            ))
             ->add('description', TextareaType::class, ['required' => false])
             ->add('profil_prive', CheckboxType::class, ['required' => false])
-            ->setAction($this->generateUrl('register'));;
+            ->setAction($this->generateUrl('register'));
 
         // Génération du formulaire
         $form = $formBuilder->getForm();
 
+        if ($request->getMethod() == 'POST') {
+
+            $form->handleRequest($request);
+            if ($form->isValid()) {
+                $chosen_username = $form->get("identifiant")->getData();
+                $em = $this->getDoctrine()->getManager();
+                $repository_profile = $em->getRepository(User::class);
+                $profile = $repository_profile->findOneBy(array('username' => $chosen_username));
+                if ($profile) {
+                    return $this->render('register/index.html.twig', [
+                        'message' => "Nom d'utilisateur déjà existant",
+                        'form' => $form->createView()
+                    ]);
+                }
+                $user->setUsername($form->get("identifiant")->getData());
+                $encoded_passwd = $encoder->encodePassword($user, $form->get('mot_de_passe')->getData());
+                $user->setPassword($encoded_passwd);
+                $user->setIsPrivate($form->get("profil_prive")->getData());
+                $user->setDescription($form->get('description')->getData());
+                $em->persist($user);
+                $em->flush();
+                return $this->redirectToRoute('index');
+            }
+        }
+
         return $this->render('register/index.html.twig', [
-            'form' => $form->createView()
+            'form' => $form->createView(),
+            'message' => ""
         ]);
     }
 }

+ 17 - 1
src/Entity/User.php

@@ -6,11 +6,12 @@ use App\Repository\UserRepository;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
 use Doctrine\ORM\Mapping as ORM;
+use Symfony\Component\Security\Core\User\UserInterface;
 
 /**
  * @ORM\Entity(repositoryClass=UserRepository::class)
  */
-class User
+class User implements UserInterface
 {
     /**
      * @ORM\Id
@@ -224,4 +225,19 @@ class User
 
         return $this;
     }
+
+    public function getRoles()
+    {
+        // TODO: Implement getRoles() method.
+    }
+
+    public function getSalt()
+    {
+        // TODO: Implement getSalt() method.
+    }
+
+    public function eraseCredentials()
+    {
+        // TODO: Implement eraseCredentials() method.
+    }
 }

+ 1 - 1
templates/base.html.twig

@@ -10,10 +10,10 @@
         {% endblock %}
 
         {% block javascripts %}
-            {#{{ encore_entry_script_tags('app') }}#}
         {% endblock %}
     </head>
     <body>
         {% block body %}{% endblock %}
+
     </body>
 </html>

+ 3 - 0
templates/login/index.html.twig

@@ -3,6 +3,9 @@
 {% block title %}Se connecter{% endblock %}
 
 {% block body %}
+    {% if message %}
+        <div>{{ message }}</div>
+    {% endif %}
 {{ form_start(form) }}
 {{ form_errors(form) }}
     {{ form_widget(form) }} <input type="submit">

+ 6 - 2
templates/register/index.html.twig

@@ -3,8 +3,12 @@
 {% block title %}S'enregistrer{% endblock %}
 
 {% block body %}
+    {% if message %}
+        <div>{{ message }}</div>
+    {% endif %}
 {{ form_start(form) }}
-{{ form_errors(form) }}
-    {{ form_widget(form) }} <input type="submit">
+    {{ form_errors(form) }}
+    {{ form_widget(form) }}
+    <input type="submit">
 {{ form_end(form) }}
 {% endblock %}