Salut a tous.

je développe une application symfony 4.

inscription, connexion, mot de passe oubliée ....

J'ai réussis à tout faire fonctionner

mais, hey oui sinon je ne serais pas la

j'ai utilisé ce tuto pour mettre en place le mot de passe oublié : http://blog.dev-web.io/2018/11/05/sy.../#comment-1244

On a donc un formulaire à remplir avec son adresse mail, on reçois un mail généré qui nous renvois vers une page pour entrer le nouveau mot de passe.

Tout fonctionne de base mais pas le rendu. J'ai mon rendu qui est complètement planté. Le block body est recouvert par le header.

Nom : Capture d’écran du 2019-02-08 22-37-43.png
Affichages : 199
Taille : 15,8 Ko

Comme vous pouvez le voir on ne vois pas le formulaire, il est sous le header.

Tout fonctionne sur mes autres page, je ne comprend donc pas ce qui ce passe.

Voici le controller :

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
 
<?php
 
namespace App\Controller;
 
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
 
 
use App\Entity\User;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
 
 
 
class SecurityController extends AbstractController
{
 
/**
     * @Route("/forgottenPassword", name="app_forgotten_password")
     */
    public function forgottenPassword(
        Request $request,
        UserPasswordEncoderInterface $encoder,
        \Swift_Mailer $mailer,
        TokenGeneratorInterface $tokenGenerator
    ): Response
    {
 
        if ($request->isMethod('POST')) {
 
            $email = $request->request->get('email');
 
            $entityManager = $this->getDoctrine()->getManager();
            $user = $entityManager->getRepository(User::class)->findOneByEmail($email);
            /* @var $user User */
 
            if ($user === null) {
                $this->addFlash('danger', 'Email Inconnu');
                return $this->redirectToRoute('home');
            }
            $token = $tokenGenerator->generateToken();
 
            try{
                $user->setResetToken($token);
                $entityManager->flush();
            } catch (\Exception $e) {
                $this->addFlash('warning', $e->getMessage());
                return $this->redirectToRoute('home');
            }
 
            $url = $this->generateUrl('app_reset_password', array('token' => $token), UrlGeneratorInterface::ABSOLUTE_URL);
 
            $message = (new \Swift_Message('Forgot Password'))
                ->setFrom(['postmain@dos.org' => 'dos.org'])
                ->setTo($user->getEmail())
                ->setBody(
                    "Voici le token pour reseter votre mot de passe : <br/>" . $url,
                    'text/html'
                );
 
            $mailer->send($message);
 
            $this->addFlash('notice', 'Mail envoyé');
 
            return $this->redirectToRoute('devosi');
        }
 
        return $this->render('security/forgotten_password.html.twig');
    }
 
     /**
     * @Route("/reset_password/{token}", name="app_reset_password")
     */
    public function resetPassword(Request $request, string $token, UserPasswordEncoderInterface $passwordEncoder)
    {
 
        if ($request->isMethod('POST')) {
            $entityManager = $this->getDoctrine()->getManager();
 
            $user = $entityManager->getRepository(User::class)->findOneByResetToken($token);
            /* @var $user User */
 
            if ($user === null) {
                $this->addFlash('danger', 'Token Inconnu');
                return $this->redirectToRoute('home');
            }
 
            $user->setResetToken(null);
            $user->setPassword($passwordEncoder->encodePassword($user, $request->request->get('password')));
            $entityManager->flush();
 
            $this->addFlash('notice', 'Mot de passe mis à jour');
 
            return $this->redirectToRoute('home');
        }else {
 
            return $this->render('security/reset_password.html.twig', ['token' => $token]);
        }
 
    }
}

voici le fichier reset_password.html.twig

Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
{% extends 'base.html.twig' %}
 
{% block title %}Reset Password !{% endblock %}
 
{% block body %}
 
    <form method="post">
 
        <h1 class="h3 mb-3 font-weight-normal">Définissez votre nouveau mot de passe</h1>
 
        <div class="form-group">
            <label for="inputPassword" class="sr-only">Password</label>
            <input type="password" name="password" id="inputPassword" class="form-control" placeholder="Password" required>
        </div>    
        <div class="form-group">    
            <input type="hidden" name="token" value="{token}">
        </div>    
 
        <div class="form-group">
            <button class="btn btn-sm btn-primary" type="submit">
                Valider
            </button>
        </div>    
    </form>
{% endblock %}

Si quelqu'un peu m'aiclérer sur ce qui foire, une piste, de la lecture ...

merci de votre aide