2011-05-15 11 views
3

Salut Je cherche à créer un simple système de mot de passe oublié en utilisant CakePHP où un utilisateur tape son nom d'utilisateur/email et reçoit un email avec un lien sur lequel il peut cliquer pour créer un nouveau mot de passe.CakePHP Oublié Mot de passe

J'ai googlé autour, mais rien trouvé:/

En utilisant CakePHP 1,3

+0

Je suppose que les noms d'utilisateur et les mots de passe sont stockés dans db et le mot de passe est stocké crypté (cryptage de hachage). Mais avez-vous accès à la base de données? – sikas

Répondre

12
  1. Afficher une vue avec un formulaire pour que l'utilisateur puisse entrer son adresse e-mail.
  2. Demandez au formulaire de publier une action de contrôleur reset_password.
  3. Dans l'action du contrôleur reset_password, recherchez this->data['User']['email'] et stockez l'adresse électronique dans une table de base de données. Cette table de base de données doit avoir un champ key ou token. Ce champ devrait être CHAR (40). Dans l'action reset_password, faites $key = Security::hash(String::uuid(),'sha1',true) pour créer une clé ou un hachage et stockez-la dans le champ key ou token.
  4. Pour générer l'URL, faites $url = Router::url(($this->here), true).'/'.$key à l'intérieur de l'action reset_password des contrôleurs. Cela générera une URL basée sur l'action en cours et ajoutera le paramètre clé que vous pouvez vérifier dans cette même fonction lorsque l'utilisateur clique sur le lien de courrier électronique.
  5. Vous devrez également configurer le composant Email pour envoyer réellement l'e-mail, y compris l'URL générée ci-dessus, dans le corps du message.

Cela devrait être suffisant pour vous aider à aller dans la bonne direction.

+0

J'aime votre réponse, tout fonctionne jusqu'à présent - mais comment continuer après l'envoi du courrier? Comment définir le nouveau mot de passe ou tout d'abord accéder à l'utilisateur? – Isengo

3
  • Demander à l'utilisateur pour leur e-mail.
  • Générez une chaîne aléatoire de longueur suffisante, enregistrez-la dans votre base de données et envoyez-la par e-mail en tant que lien avec son adresse e-mail. Faites-le expirer dans les 24 heures. Dites-leur d'ignorer l'e-mail s'ils n'ont pas demandé un nouveau mot de passe.
  • Correspondance du courrier électronique et de la chaîne dans la base de données. Présentez-leur un formulaire pour entrer un nouveau mot de passe ou leur envoyer un nouveau mot de passe (chaîne aléatoire différente).
2

Vous pouvez jeter un oeil à deux solutions pré-faites qui pourraient répondre à vos besoins:

Spark Plug par Jedt - https://github.com/jedt/spark_plug

utilisateurs Plugin par CakeDC - https://github.com/CakeDC/users

Les deux ont un Fonction "Mot de passe oublié" Vous pouvez soit inclure l'un des plugins dans votre projet, obtenant ainsi tout le bénéfice de tout le code, ou vous pouvez simplement déballer leur code pour le faire fonctionner dans votre propre projet.

Questions connexes