2010-11-05 1 views
0

J'ai un bug bizarre sur l'un de mes sites. J'utilise authlogic pour toutes les choses liées à la connexion, y compris un processus de réinitialisation de mot de passe qui fonctionne comme suit:Jetons périssables Authlogic - sont-ils spécifiques au navigateur?

D'abord, l'utilisateur tape son adresse électronique et appuie sur un bouton pour envoyer un lien de réinitialisation du mot de passe. Dans l'action suivante je fais ceci:

user.reset_perishable_token! 
user.host = request.host_with_port 
token = user.perishable_token 

« jeton » va dans un lien dans l'e-mail, ils sont ensuite envoyés, qui a ce format:

<domain name>/users/edit_password?id=1670&token=y1j6k__imXOajyNGq8DN 

où id est l'identifiant de l'utilisateur et le jeton est le jeton que je viens de générer.

Sur l'action que les points de connexion de messagerie, je le font:

@user = User.find_using_perishable_token(params[:token], 1.day) 

Et sur la base de savoir si @user est vide ou non, je décide si le jeton est valide et ils peuvent aller de l'avant et changez leur mot de passe. Généralement cela fonctionne bien, mais j'ai un problème où si quelqu'un génère l'email de réinitialisation dans un navigateur, puis reçoit l'email dans un autre navigateur et clique dessus (ouvrant ainsi la page 'edit_password' dans le navigateur B), le lien est décidé être invalide.

Je ne vois pas pourquoi le navigateur ferait une différence. Je pensais que c'était dû à l'heure du système peut-être, mais ce serait la même chose dans les deux navigateurs non?

Reconnaissants pour toute pensée - max

Répondre

0

Shouldnt faire une différence. Assurez-vous de ne pas enregistrer l'utilisateur après l'envoi du jeton périssable - le jeton périssable sera modifié lors de la sauvegarde.

+0

merci - je pensais que cela ne devrait pas faire la différence. Le jeton périssable fonctionne très bien dans un navigateur donné, donc je ne pense pas que je fais quelque chose de mauvais côté serveur. C'est plutôt mystérieux. –