Conception redirection après confirmation
comment créer une redirection après confirmation dans devise?
avant d'ajouter le confirmation module
la coutume after_sign_up_path
a bien fonctionné pour la première fois login/signup
mais maintenant, quand je clique sur le lien de confirmation dans le courriel, il redirige vers le chemin que j'ai défini pour le chemin de connexion après (profil de l'utilisateur).
mon but ici est de créer un assistant de formulaire et une page "démarrage" pour collecter des informations supplémentaires. La mise en garde évidente étant que cette redirection ne se produira 1 fois, sur confirmation.
j'ai essayé d'autres solutions qui ont été postées sur stack mais aucune ne semble fonctionner plus..
6 réponses
essentiellement, vous voulez changer cette ligne du contrôleur de confirmation de Devise:
cela signifie que vous devez annuler l'action show. Il suffit de modifier le chemin heureux de cette déclaration de "si" dans l'action de spectacle au contenu de votre cœur:
class ConfirmationsController < Devise::ConfirmationsController
def new
super
end
def create
super
end
def show
self.resource = resource_class.confirm_by_token(params[:confirmation_token])
if resource.errors.empty?
set_flash_message(:notice, :confirmed) if is_navigational_format?
sign_in(resource_name, resource)
respond_with_navigational(resource){ redirect_to confirmation_getting_started_path }
else
respond_with_navigational(resource.errors, :status => :unprocessable_entity){ render_with_scope :new }
end
end
end
et une route scoped pour elle (je mets la vue et l'action dans les enregistrements contrôleur mais vous pouvez le modifier en quoi que ce soit):
devise_for :users, controllers: { confirmations: 'confirmations' }
devise_scope :user do
get '/confirmation-getting-started' => 'registrations#getting_started', as: 'confirmation_getting_started'
end
l'Action show par défaut se réfère à laafter_confirmation_path_for
méthode, donc comme une autre option, vous pouvez juste modifier ce que cette méthode retourne.
une façon moins intrusive d'y parvenir serait simplement de passer outre le after_confirmation_path_for
méthode Devise::ConfirmationsController
.
Créer un nouveau confirmations_controller.rb
app/controllers
répertoire:
class ConfirmationsController < Devise::ConfirmationsController
private
def after_confirmation_path_for(resource_name, resource)
your_new_after_confirmation_path
end
end
config/routes.rb
, ajouter cette ligne pour que Devise utilise votre custom ConfirmationsController
. Cela suppose que le dispositif fonctionne sur users
table (vous pouvez modifier pour correspondre à la vôtre).
devise_for :users, controllers: { confirmations: 'confirmations' }
Redémarrer le serveur web, et vous devriez l'avoir.