2011-02-06 1 views
2

Je suis en train de créer une application web en utilisant PHP et demander de l'aide pour vérifier un utilisateur. Comme pour certains sites, lors de votre inscription, un e-mail vous est envoyé avec un lien de confirmation. Comment puis-je l'implémenter en PHP? Tout ce que je sais, c'est que je dois utiliser la fonction PHP mail() pour envoyer l'e-mail. S'il vous plaît aider. Nécessaire. Merci. :)vérifier un utilisateur par e-mail en PHP

Répondre

1

Tout comme avec la protection CSRF, vous générez un jeton unique.

$token = md5(uniqid(rand(), TRUE)); 

Vous pouvez stocker cette valeur dans votre session pour que le courrier électronique et lorsque l'utilisateur clique un lien dans l'email (vous passez jeton via le query-string) vous comparez les deux valeurs. Pour plus de sécurité, vous pouvez tout comme avec CSRF ajouter une limite de temps.

+1

pourquoi diable voudrais-tu courir ça par md5. Vous venez de faire une clé unique pas si unique. – Petah

+0

lol Il est assez unique pour ce cas d'utilisation. – Alfred

+1

Merci Alfred. Vous m'avez trouvé la bonne solution pour aller plus loin dans la tâche. À votre santé! :) – ikartik90

3

C'est une question très large, donc nous ne pouvons donner une réponse générale, mais la technique générale de le faire est

  1. insérer l'adresse e-mail de l'utilisateur dans votre base de données, mais marquer comme non vérifiée
  2. créer une clé d'enregistrement unique et l'insérer dans une autre table juste pour ces clés
  3. envoyer un e-mail à l'adresse e-mail de l'utilisateur avec un lien vers votre site qui passe cette clé d'enregistrement comme argument (par exemple http://site.com/confirm.php?key=1234)
  4. quand cette URL est vis ité, marquer l'e-mail comme vérifié et supprimer la clé d'enregistrement créée temporairement
+0

Merci Patrick. Cela sert une aide précieuse. Tous les trois (Joe, vous et Alfred) avez tous donné la solution complète à ma question vraiment "large". À votre santé. Rester connecté. :) – ikartik90

+0

Comment savez-vous que c'est cet utilisateur qui a visité l'URL? Ou, est une URL unique fournie à chaque utilisateur? – ggkmath

+0

@ggkmath à cause de l'étape 2, "créer une clé d'enregistrement unique". Si vous utilisez des nombres séquentiels, assurez-vous qu'il est possible à quelqu'un de deviner le suivant dans la séquence, mais si vous faites quelque chose comme une somme md5 d'un nombre aléatoire, personne ne devinera cela. – Patrick

7

Patricks réponse est correcte même si je tiens à souligner qu'il existe d'autres possibilités!

Vous ne devez pas nécessairement créer et stocker un jeton unique dans votre base de données. C'est un surdébit de données qui n'est nécessaire qu'une seule fois.

Vous pouvez également profiter d'un hachage unidirectionnel.

Par exemple, envoyez à l'utilisateur le code md5('my-secret-application-token'.$user_email_adress).

Vous pouvez valider cela de la même manière, mais pas besoin de stocker un code secret.

+1

Si je vole 'my-secret-application-token', alors je peux me connecter comme n'importe quel utilisateur que je voudrais: P. – Alfred

+1

true @Alfred c'est la raison pour laquelle les mots de passe, les keychains, les tokens et tout ça ont été créés! ce serait ennuyeux s'il n'y avait pas là à voler. –

+0

Merci Joe. Que ce problème mienne à une fin. Merci pour l'aide. Rester connecté. À votre santé. :) – ikartik90