Recherche pour un de bonnes options pour envoyer aux utilisateurs de réinitialiser le mot de passe e-mails
Je veux envoyer des mails aux utilisateurs lors de l'oublient leurs mots de passe qui invite à réinitialiser leur mot de passe. Je sais que c'est discutable et a été la recherche de quelques bonnes options/suggestions/méthodes/articles à choisir.
Je suis en invitant les utilisateurs à cliquer sur "mot de passe oublié" lien avec un simple script PHP partie:
$Email = $_POST['email'];
$success = false;
$formError = false;
if(isset($_POST['sub_forgot_pw'])) {
if(empty($_POST['email'])) {
$formError = "true";
$error = "Please enter your e-mail address.";
}else{
$to = $Email;
$subject = "Password Help";
$message = "To reset your password, please <a href='http://www.blahblahblah.org'>Click here</a><br /><br />Do LIFE,<br /> The Team";
$from = "CysticLife <[email protected]>";
$headers = 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n";
$headers .= "From: $from";
if(mail($to, $subject, $message, $headers));{
$success = "true";
}
}
}
À mon avis vous ne devez pas stocker les mots de passe et l'utilisateur ne devrait pas avoir à créer un autre compte pour utiliser votre service. J'ai créé cette simple openid helper library(utilise LightOpenID et openid-sélecteur) que vous pouvez utiliser si vous le souhaitez à la place? => github.com/alfredwesterveld/php-openid
Ou vous pouvez utiliser solution, c'est du C#, mais doit s'adapter à vos besoins.
Juste une note de côté. Cette requête
Ceux qui sont vraiment cool, cependant, j'ai environ 3500 membres sur mon site. Serait juste à comprendre une transition en douceur.
Ou vous pouvez utiliser solution, c'est du C#, mais doit s'adapter à vos besoins.
Juste une note de côté. Cette requête
SELECT * FROM
Utilisateurs OÙ Status
= "active" semble mal pour moi. Il manque au moins une condition. Il doit être quelque chose comme SELECT * FROM
Utilisateurs OÙ Status
= "active" ET email = '$email"Ceux qui sont vraiment cool, cependant, j'ai environ 3500 membres sur mon site. Serait juste à comprendre une transition en douceur.
SELECT * FROM Users WHERE status = 'active'
reviendra toujours au moins une ligne jusqu'à ce qu'il y a au moins un utilisateur actif. $Email = $result['Email'];
est l'e-mail de la valeur de la première ligne retournées par la requête, donc je ne peux pas comprendre comment il fonctionne, mais je suis content que cela fonctionne pour vous! 🙂OriginalL'auteur LightningWrist | 2011-01-31
Vous devez vous connecter pour publier un commentaire.
Voici ce que je fais:
J'ai reset_password table. Quand quelqu'un demande un reset, ils ont l'habitude de cliquer sur un lien sur votre site qui dit "mot de passe oublié" où ils entrent dans leur e-mail-ils enregistrés et de votre système envoie un lien.
Bien sûr, vous commencez à trouver si l'utilisateur est enregistré. en sélectionnant from users where email = $_POST['email'].
Si elles existent, de faire une générés au hasard un jeton, comme
Mais comme Bye Bye exprimée dans le commentaire ci-dessous, vous pouvez utiliser quelque chose d'un peu moins évident pour générer votre jeton. crypt() peut accepter un sel de modèle si vous le souhaitez.
Insérez la demande (e-mail et un jeton) dans le reset_password table, puis vous envoyer un lien comme
Alors dans ce fichier, vous prenez le $_GET['token'] et de la croix de référence avec le reset_password table. Si le jeton est valide, vous pouvez soumettre un formulaire de demande pour leur nouveau mot de passe.
Lors de la soumettre, sélectionnez l'utilisateur avec l'adresse e-mail liée à ce jeton et mise à jour de la table user.
(Posté par un utilisateur anonyme): N'utilisez PAS cet avis, il est très précaire. Tous, quelqu'un l'aurait à faire pour réinitialiser un mot de passe sur votre site, c'est d'entrer quelqu'un email lors de la réinitialisation vide, et de regarder leur montre au poignet, puis faire le même jeton d'eux-mêmes. N'importe qui peut savoir l'heure à la seconde, et n'importe qui peut prendre exactement le même MD5.
Vrai, mais pour être exact, et ils auraient aussi savoir c'est certainement la méthode utilisée, qui peut ne pas être trop difficile à déchiffrer, même si un peu d'effort a été mis dans le hack. Mais le concept général n'est pas particulièrement précaire, aussi longtemps que vous créez jeton de règles qui ne sont pas facilement identifiables par l'url.
Bye, Bye: Donc, au lieu d'utiliser
time()
il est préférable de créer un complètement aléatoire clé comme:$key = uniqid(mt_rand(), true);
et de créer ensuite le jeton comme:$token = md5($_POST['email'].$key);
ou sha1 et sha256?oui, assez bien. Il s'agit de créer une chaîne de caractères et de spire le processus de génération assez pour éviter que les gens en essayant de deviner vos méthodes et bidouiller.
OriginalL'auteur Kai Qing
Il y a un danger de perdre l'url à quelqu'un qui renifle réseau. Pour éviter cela, vous pouvez générer aléatoirement une clé courte comme vX4dq et de l'enregistrer dans votre base de données. Demander à l'utilisateur de s'en rappeler. Quand un utilisateur réinitialise via le lien, demandez-lui d'entrer cette clé n'est connu que de lui.
Avancé :- vous pouvez montrer cette clé dans un captcha afin qu'elle ne soit pas reniflé.
OriginalL'auteur user2602198