2011-03-28 57 views
15

我有一个Rails 3项目,Devise启用,确认已启用,因此用户必须在注册后通过电子邮件确认其帐户。目前该项目将用户返回到登录页面并引发“您已成功注册...”通知。我想要做的是将它们重定向到“谢谢”页面,并提供进一步的说明(检查您的电子邮件,垃圾邮件文件夹,等等)。Rails 3和Devise:重定向到页面注册之后(可确认)

我的第一站是Devise wiki,其中我found this page。看起来很容易,我做了如下修改和遵循的方向正是...

/app/controllers/registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController 
    protected 
     def after_sign_up_path_for(resource) 
     "http://google.com" 
     end   
end 

/config/routes.rb

devise_for :users, :controllers => { :registrations => "registrations" } 

我必须对这个方向进行的一个修改是将“registrations”文件夹移出/ app/views/devise视图文件夹并移动到top/app/views文件夹中,作为e Rror回复说现在的观点不见了。无论如何,尽管控制器覆盖似乎无法正常工作(我认为视图本来不会破坏),但这些指示不起作用......页面忽略after_sign_up并在注册后返回登录页面。

出去打互联网包括其他堆栈溢出线程上,但没有我发现很适合我......无论答案混淆重定向注册了登录,或者他们实际上做的改变符号后重定向(因为Devise通常在注册后自动登录而无需确认启用)。

其他的事情我已经试过......

  1. 移动after_sign_up_path_for(资源)到应用程序控制器。不起作用。奇怪的是,对after_sign_in_path_for(resource)进行同样的操作,并且以用户身份登录并重定向。

  2. 将registrations_controller.rb从/ app/controllers /移动到/ app/controllers/users文件夹并相应地更新所有路由/参考/等等。不行。

  3. 将Devise的registrations_controller.rb复制到我自己的registrations_controller.rb中。没有工作,只是抛出一个错误,我把它全部回滚。

  4. 我试图def after_inactive_sign_up_path_for(资源),因为我想也许事实上,该帐户不活跃,但是罪魁祸首。这也被忽略。

  5. 还值得一提的是我已经尝试重新启动我的项目后,这些重大变化,但没有任何要求。

有没有人可以用可确认启用拉这个关闭任何成功?

回答

11

您正在使用哪个版本的设计?我很肯定这issue was recently resolved所以你可能需要最新版本的回购版,它仍然是一个候选版本(尽管它应该等待omniauth 0.2退出最近发布的测试版)。

我使用Devise 1.2.rc2从轨道3.0.5的github回购。我添加了您提到的自定义RegistrationsController的代码,并在创建新帐户后按预期转发给Google。

我RegistrationsController的缩减版本,(在应用程序/控制器/用户)

class Users::RegistrationsController < Devise::RegistrationsController 
    protected 
     def after_sign_up_path_for(resource) 
     "http://google.com" 
     end 

end 

我的routes.rb进入

devise_for :users, :controllers => { :registrations => "users/registrations" } 

从我的Gemfile

gem 'devise', :git => "git://github.com/plataformatec/devise.git" 

让我知道如果你在最新版本的设计上遇到问题。

+0

我用的是1.1.8设计,没有考虑到更新的宝石。无论如何,我将Devise更新为1.2.1(以及Rails 3.0.5和其他所有宝石),但仍拒绝重定向,只返回主页并发出“您已成功注册”的消息。 ,我们无法登录您,因为您的帐户未经确认。“ (这对我来说是一个新消息,但我认为他们添加了Devise更新中的一个。)我的代码看起来与您的代码完全相同。但是上面的'after_sign_up_path_for'就是我在RegistrationsController中的所有内容,是足够的还是我需要更多的控制器? – Shannon 2011-03-29 03:53:52

+0

另外,我也把上面的东西扔在我的gemfile中,试过Devise 1.3.0.dev,也忽略了我的控制器的重定向。 – Shannon 2011-03-29 04:10:00

+6

等一下,我想我明白了。我用after_inactive_sign_up_path_for换出after_sign_up_path_for,现在它重定向到Google。所以最终的答案是这样的,以及如上所述更新宝石。非常感谢。 – Shannon 2011-03-29 04:24:10

14

我只是把@香农的评论放入一个答案,以便更容易找到。

如果您在注册后需要电子邮件确认,您的用户将留在他们已注册的中间状态,但未点击通过电子邮件发送给他们的链接以确认其帐户。这是一个无效的注册。在这种情况下,重定向,您需要指定:

def after_inactive_sign_up_path_for(resource) 
    "http://example.com" 
end 
1

另一种方法是做到这一点的应用控制器

def after_sign_in_path_for(resource) 
    resource.sign_in_count <= 1 ? '/edit_profile' : root_path 
end 
+0

它对我来说炒作:) – 2016-09-16 14:22:36

相关问题