如何在确认后重定向Devise

问题描述 投票:40回答:6

如何在Devise中创建确认后重定向?

在添加confirmation module之前,自定义after_sign_up_path第一次可以很好地工作login/signup,但是现在,当我单击电子邮件中的确认链接时,它将重定向到我为登录后路径设置的路径(用户个人资料)。

我的目标是创建一个表单向导和“入门”页面以收集其他信息。显而易见的警告是,这种重定向仅在确认后才会发生一次。

我尝试了一些其他解决方案,这些解决方案已发布在Stack Overflow上,但似乎都不再起作用。

ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1
6个回答
19
投票

基本上,您想在Devise的line 25ConfirmationsController附近更改。

这意味着您需要重写show操作,以使您的if操作中的show语句的“快乐路径”适应您的内心:

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

以及它的作用域路由(我将视图和操作放入了注册控制器,但是您可以将其更改为任何内容:]]

devise_for :users, controllers: { confirmations: 'confirmations' }
devise_scope :user do
  get '/confirmation-getting-started' => 'registrations#getting_started', as: 'confirmation_getting_started'
end

默认show操作是指受保护的after_confirmation_path_for方法,因此,作为另一个选择,您可以修改该方法返回的内容。


127
投票

一种不太麻烦的实现此方法的方法可能是重写after_confirmation_path_forDevise::ConfirmationsController方法。


19
投票

您是否已检查Devise wiki?它说明了如何执行此操作,其中after_signup_path_for是根据您的情况定义的路径。


2
投票

@ Lee Smith提供的解决方案效果很好,但我希望添加一些补充,即我们不需要添加新的和创建操作


2
投票

我只是仔细阅读了所有这些内容,其他答案均无济于事(2015-04-09,设计3.4.1)。


-2
投票

confirmation_path也必须在使用与Rails应用程序集成的refinerycms

© www.soinside.com 2019 - 2024. All rights reserved.