2

J'ai ajouté une nouvelle migration à une table dans mon application et je migre. Comme il avait des erreurs, je l'ai laissé tomber et l'ai migré. Lorsque je me suis inscrit pour un utilisateur et que j'ai essayé de le confirmer en utilisant un email (devise, confirmable), il ne confirme pas. Il indique un jeton de confirmation invalide. J'ai essayé de redémarrer le serveur. Laisser tomber et migrer à nouveau, tout ce qui est possible pour autant que je sache. J'utilise Rails 3.2.9 et Ruby 1.9.3. La version de Devise est 3.1.0. Devise est également inclus dans d'autres gems que j'ai ajouté comme rails-messagerie et active-admin.concevoir le jeton de confirmation est invalide

Started POST "https://stackoverflow.com/users/confirmation" for 127.0.0.1 at 2013-09-16 19:42:47 +0530 
Processing by Devise::ConfirmationsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"4lMxdlsMqRCJB1doxt/hTCQhUPvAoGPiSbr9wQA/ZAQ=", "user"=>{"email"=>"[email protected]"}, "commit"=>"Resend confirmation instructions"} 

User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."unconfirmed_email" = '[email protected]' LIMIT 1 

User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."email" = '[email protected]' LIMIT 1 
    User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."confirmation_token" = 'cc47150f51ec476aa40ea1d546e27c0dafc37ffc8bb82272a9f2377c863daed1' LIMIT 1 
    (0.1ms) begin transaction 
    (0.3ms) UPDATE "users" SET "confirmation_token"='cc47150f51ec476aa40ea1d546e27c0dafc37ffc8bb82272a9f2377c863daed1', "confirmation_sent_at" = '2013-09-16 14:12:47.174313', "updated_at" = '2013-09-16 14:12:47.175384' WHERE "users"."id" = 1 
    (175.3ms) commit transaction 
    Rendered devise/mailer/confirmation_instructions.html.erb (0.6ms) 

Sent mail to [email protected] (5099ms) 
Date: Mon, 16 Sep 2013 19:42:47 +0530 
From: [email protected] 
Reply-To: [email protected] 
To: [email protected] 
Message-ID: <[email protected]> 
Subject: Confirmation instructions 
Mime-Version: 1.0 
Content-Type: text/html; 
charset=UTF-8 
Content-Transfer-Encoding: 7bit 

<p>Welcome [email protected]!</p> 

<p>You can confirm your account email through the link below:</p> 

<p><a href="http://localhost:3000/users/confirmation?confirmation_token=cc47150f51ec476aa40ea1d546e27c0dafc37ffc8bb82272a9f2377c863daed1">Confirm my account</a></p> 

Redirected to http://localhost:3000/users/sign_in 
Completed 302 Found in 5387ms (ActiveRecord: 0.0ms) 

Répondre

1

Ceci est probablement lié aux mises à jour de sécurité dans Devise 3.1. Le jeton envoyé à l'utilisateur ne correspond pas à celui qui se trouve dans la base de données. Vous pouvez désactiver cette fonctionnalité en incluant dans votre legs initialiseur:

config.allow_insecure_token_lookup = true 

Mais il serait préférable de supprimer tout simplement l'utilisateur et créer une nouvelle avec le nouveau système de jetons.

Voir ce billet de blog sur les modifications de sécurité dans Devise 3.1: http://blog.plataformatec.com.br/2013/08/devise-3-1-now-with-more-secure-defaults/ Vous êtes à la recherche de la section intitulée « Store digéré jetons dans la base de données »

3

allez ajouter mon expérience ici dans le cas où il peut aider quelqu'un autre. La mise à niveau vers le périphérique 3.1 comme BillyMFH a changé la façon dont les jetons sont créés. L'article de blog contient beaucoup d'informations, et la solution au problème dans cette réponse est temporaire. Si config.allow_insecure_token_lookup est défini sur false (et une fois que cette option est obsolète), le correctif dans mon cas était de mettre à jour les vues d'e-mail que Devise utilise pour envoyer des liens contenant des jetons.

vues email Old contiennent des lignes comme Concevoir ceci:

<p><%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token) %></p> 

Il utilise l'ancien jeton stocké dans le DB. Maintenant, vous faites simplement ceci:

<p><%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @token) %></p> 

substitue à l'ancien jeton de ressource avec la nouvelle variable d'instance @token

Le lien dans le message de blog à ce changement est mis en surbrillance ici: Devise email view token change

1

Juste vous besoin de faire les changements suivants pendant que vous mettez à jour concevoir ou bien

Dans la ligne suivante dans le fichier app/views/devise/mailer/confirmation_instructions.html.erb

<p><%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %></p> 

avec ligne nouvelle -

<p><%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @token) %></p> 

Cela permettra de résoudre définitivement votre problème, ça marche juste pour moi.

À la votre!

Questions connexes