2010-10-21 12 views
3

Comment personnaliser cette ligne par défaut générée par Devise dans la vue mailer?Personnalisation de la confirmation_url dans Devise

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

J'ai écrit une méthode dans mon contrôleur appelé user_confirm. Et j'ai aussi défini une route pour cela. Est-ce que je peux obtenir l'URL pour lier à cette méthode avec le jeton en tant que params?

Répondre

7

J'ai utilisé ce routage:

map.user_confirm 'confirm/:confirmation_token', 
    :controller => 'confirmations', :action => 'show' 

Et ce ERB:

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

et a obtenu ce joli lien:

http://localhost:3000/confirm/RjOnrd5yNREEDwsEfiFa 
+0

quels changements dois-je faire si je veux que l'utilisateur sera redirigé vers https dans la production? –

+0

le lien que j'envoie maintenant est http, et l'utilisateur obtient aussi son jeton mais comme l'application est hébergée sur un https, elle ne reconnaît pas le jeton: | –

+0

Devise 3 Update: concevoir utilise maintenant un jeton plus court qui est ensuite haché avant de pouvoir être comparé à la base de données. Votre lien mailer devrait ressembler à ceci: 'link_to 'Confirmer mon compte', confirmation_url (@resource, confirmation_token: @token)' – steakchaser

0

Vous l'avez. disons que je définis un itinéraire nommé comme celui-ci.

map.user_confirm '/user_confirm', :controller => 'users', :action => 'confirm' 

tout ce que je devais faire est

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

Son quelque chose comme (en routes.rb):

devise_scope :user do 
    match '/confirm/:confirmation_token', :to => "devise/confirmations#show", :as => "user_confirm", :only_path => false 
end 

et vues que vous pouvez utiliser quelque chose comme:

<%= link_to 'Confirm my account', user_confirm_url(@resource.confirmation_token) %> 

pour Rails 3.

+0

Merci! ça a marché! –

+0

Cela semble être une meilleure réponse que celle acceptée, sauf si je suis malentendu. Celui-ci fonctionne avec Rails 3.2. Remarque: '" devise/confirmations # show "indique explicitement d'utiliser le contrôleur de confirmation Devise par défaut Si vous avez un contrôleur de confirmation personnalisé, utilisez' confirmations # show' à la place, sinon vous aurez un comportement inattendu. – John

2
  • rails 4.0.5
  • devise 3.2.4

avant

url:

http://example.com/users/confirmation?confirmation_token=jevYKv1z9Pr1LsAUB2NX 

app/vues/concevoir/Mailer/confirmation_instructions.html.erb:

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

après

config/routes.rb:

devise_scope :user do 
    get 'confirm/:confirmation_token', to: 'devise/confirmations#show' 
end 

app/vues/concevoir/Mailer/confirmation_instructions.html.erb:

<p><%= link_to 'Confirm my acount', confirm_url(@token) %></p> 

url:

http://example.com/confirm/Kezap1iutgvXyQAhyu64 
0

Personnalisation de l'URL DEVISE ne sera pas udpate colonne 'confirmed_at' de la table utilisateur, ce que vous pouvez faire est de rediriger l'utilisateur après avoir cliqué sur le lien de confirmation :

ÉTAPE 1 override les after_confirmation_path_for dans votre confirmations_controller:

Créer une nouvelle confirmations_controller.rb dans app/controllers:

class ConfirmationsController < Devise::ConfirmationsController 
    private 
    def after_confirmation_path_for(resource_name, resource) 
    your_new_after_confirmation_path 
end 
end 

ÉTAPE 2 Dans config/routes.rb, ajoutez cette ligne afin que utilisera votre Devise ConfirmationsController personnalisée. Cela suppose que Devise fonctionne sur la table des utilisateurs (vous pouvez modifier pour correspondre au vôtre).

devise_for :users, controllers: { confirmations: 'confirmations' } 

ÉTAPE 3 Redémarrez le serveur Web