如何在Devise中创建确认后重定向?
在添加confirmation module
之前,自定义after_sign_up_path
第一次可以很好地工作login/signup
,但是现在,当我单击电子邮件中的确认链接时,它将重定向到我为登录后路径设置的路径(用户个人资料)。
我的目标是创建一个表单向导和“入门”页面以收集其他信息。显而易见的警告是,这种重定向仅在确认后才会发生一次。
我尝试了一些其他解决方案,这些解决方案已发布在Stack Overflow上,但似乎都不再起作用。
基本上,您想在Devise的line 25的ConfirmationsController
附近更改。
这意味着您需要重写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
方法,因此,作为另一个选择,您可以修改该方法返回的内容。
一种不太麻烦的实现此方法的方法可能是重写after_confirmation_path_for
的Devise::ConfirmationsController
方法。
您是否已检查Devise wiki?它说明了如何执行此操作,其中after_signup_path_for
是根据您的情况定义的路径。
@ Lee Smith提供的解决方案效果很好,但我希望添加一些补充,即我们不需要添加新的和创建操作
我只是仔细阅读了所有这些内容,其他答案均无济于事(2015-04-09,设计3.4.1)。
confirmation_path
也必须在使用与Rails应用程序集成的refinerycms