04-07-2011, 07:31 PM
Une autre astuce est d'intégrer une image transparente dans le mail dont la source est sur le Web. Quand cette image est chargée, tu peux considérer que l'utilisateur a lu l'email et mettre à jour une colonne DATETIME (read_last_email_at, par exemple) de cet utilisateur.
Mon application capte les URL de la forme "/users/:id/:email_token/validate_email(.format)" et mon action s'occupe de la traiter :
Je récupère l'utilisateur, puis je vérifie la correspondance du jeton reçu et du véritable jeton. Si ça correspond, je mets à jour la date de réception et je génère un nouveau jeton afin qu'un utilisateur ne puisse pas simuler la réception d'un email.
Et dans tous les cas, mon action sert un GIF transparent de 1x1.
Voilà pour l'astuce !
<img src="http://example.org/users/42/85ec0c11215983f46b849fb202a33bdf/validate_email.gif" alt="" />
Mon application capte les URL de la forme "/users/:id/:email_token/validate_email(.format)" et mon action s'occupe de la traiter :
def validate_email
user = User.find(params[:id])
if user.email_token = params[:email_token]
user.read_last_email_at = Time.current
user.email_token = SecureRandom.hex
user.save
end
render Rails.root.join('public', 'images', 'blank.gif'), :content_type => :gif
end
Je récupère l'utilisateur, puis je vérifie la correspondance du jeton reçu et du véritable jeton. Si ça correspond, je mets à jour la date de réception et je génère un nouveau jeton afin qu'un utilisateur ne puisse pas simuler la réception d'un email.
Et dans tous les cas, mon action sert un GIF transparent de 1x1.
Voilà pour l'astuce !