Bonjour,
Voilà, je souhaite créé un formulaire de modification de mot de passe à la première connexion. Avant toutes choses, je viens à dire que je me considère comme débutante en CakePHP comme en PHP, mais je suis obligée d'utiliser un framework.
Je m'explique. La création de compte ne sera pas possible sur mon site, chaque compte sera créé par un administrateur qui entrera un mot de passe provisoire dans la base. Du coup, quand l'utilisateur se connectera la première fois, il sera redirigé vers un formulaire de modification de mot de passe avant d'accéder au site.
Voici ma table users, dans laquelle j'ai rajouté un champ "first_connect" en booléen. S'il est à 1 cela veut dire qu'il ne s'est pas encore connecté.
Voici mon contrôleur, dans lequel j'ai créé une fonction login, qui renvoie à une fonction firstLogin si c'est la première connexion de l'utilisateur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `username` varchar(20) NOT NULL, `password` varchar(250) NOT NULL, `name` varchar(20) NOT NULL, `first_name` varchar(20) NOT NULL, `email` varchar(250) NOT NULL, `status` tinyint(1) NOT NULL, `first_connect` tinyint(1) NOT NULL, `profil_id` int(11) NOT NULL, FOREIGN KEY profil_user_key (profil_id) REFERENCES users (id) ) ;
Code : 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 class UsersController extends AppController { // Fonction permettant l'authentification au site public function login() { if ($this->request->is('post')) { // Récupère l'identifiant de l'utilisateur $user = $this->Auth->identify(); if($user) { $this->Auth->setUser($user); // Si l'utilisateur se connecte pour la première fois, il est renvoyé vers le formulaire "first_login" if($user['first_connect'] == 1) { return $this->redirect(['controller' => 'users', 'action' => 'first_login']); } // Sinon il est redirigé vers la page d'accueil else { return $this->redirect($this->Auth->redirectUrl()); } } $this->Flash->error('Identifiant ou mot de passe incorrect.'); } } public function firstLogin() { $user = $this->Auth->user(); // Vérification de correspondance des deux champs de mot de passe if($this->data['User']['password'] == $this->data['User']['password2']) { // Enregistrement de modification de mot de passe $user = $this->Users->findById($user['id'])->first(); $user->password = $this->data['password']; $this->Users->first_connect = 0; //$user = $this->User->save($this->data); if ($this->request->is('post')) { if($this->Users->save($user)) { $this->Flash->success(__('Le mot de passe a bien été modifié.')); return $this->redirect(['action' => 'index']); } } } else { $this->Flash->error('Les mots de passe ne correspondent pas.'); } } // Fonction de déconnexion du site public function logout() { $this->Flash->success('Vous êtes maintenant déconnecté.'); return $this->redirect($this->Auth->logout()); } }
Et voici ma vue first_login.ctp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <div class="users form large-9 medium-8 columns content"> <?= $this->Form->create() ?> <fieldset> <legend><?= __('Modification du mot de passe') ?></legend> <?php echo $this->Form->input('password', array('label' => 'Mot de passe')); echo $this->Form->input('password2', array('type' => 'password', 'label' => 'Confirmer votre mot de passe')); ?> </fieldset> <?= $this->Form->button(__('Submit')) ?> <?= $this->Form->end() ?> </div>
Voici mon problème : lorsque je me connecte, je suis bien redirigée vers le formulaire de modification, j'entre mon nouveau mot de passe et la confirmation, lorsque je clique sur le bouton d'enregistrement je suis bien redirigée vers le site et j'ai bien mon message qui me dit que le mot de passe a été modifié. Toutefois, si je me déconnecte et que je tente de me reconnecter, il me dit mot de passe invalide que ce soit avec le nouveau mot de passe, ou l'ancien...
J'ai remarqué qu'il ne rentrait pas dans mon second if lorsque je fais un die(). Mais alors pourquoi il m'affiche le message Flash lorsque je fais la modification du mot de passe ? o_O
Je pense que je m'y prends mal pour récupérer les données du formulaire, mais je n'arrive pas à comprendre comment m'y prendre...
Quelqu'un pourrait-il m'aider ? :honte:
Ju'
Partager