Rails 3和Devise:重定向到注册后的页面(可确认)

Sha*_*non 15 redirect ruby-on-rails devise

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

我的第一站是Devise wiki,在那里我找到了这个页面.看起来很容易,我做了以下改动,并严格按照指示......

/app/controllers/registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController
   protected
      def after_sign_up_path_for(resource)
        "http://google.com"
      end        
end
Run Code Online (Sandbox Code Playgroud)

/config/routes.rb

devise_for :users, :controllers => { :registrations => "registrations" }
Run Code Online (Sandbox Code Playgroud)

我必须在方向上进行的一项修改是将"registrations"文件夹移出/ app/views/devise视图文件夹并移至top/app/views文件夹,因为返回的错误现在缺少视图.无论如何,尽管控制器覆盖似乎工作(我不认为视图原本会打破其他方式),这些方向不起作用...页面忽略after_sign_up并在注册后返回登录页面.

在互联网上搜索包括其他Stack Overflow线程,但我发现的任何内容都没有对我有用...或者回答混淆重定向注册用于登录IN,或者他们实际做的是在登录后更改重定向(正如Devise通常注册后自动登录,不启用确认).

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

  1. 将after_sign_up_path_for(资源)移动到应用程序控制器中.不行.奇怪的是,对after_sign_in_path_for(资源)执行相同操作并以用户身份登录重定向.

  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. 值得一提的是,我已经尝试在这些重大更改后重新启动我的项目,但没有任何需要.

有没有人在启用确认功能的情况下取得成功?

Und*_*ion 14

我只是将@ Shannon的评论放到答案中,以便更容易找到.

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

def after_inactive_sign_up_path_for(resource)
  "http://example.com"
end
Run Code Online (Sandbox Code Playgroud)


Bra*_*ker 11

您使用的是哪个版本的设计?我很确定这个问题最近已经解决了所以你可能需要来自repo的最新版本,它仍然是一个候选版本(尽管它应该很快就会出现,因为它们正在等待omniauth 0.2才能退出最近发生的测试版) .

我正在使用带有rails 3.0.5的github repo中的Devise 1.2.rc2.我将您提到的代码添加到我的自定义RegistrationsController中,并在创建新帐户后按预期转发给Google.

我的RegistrationsController的缩减版本(在app/controllers/users中)

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

end
Run Code Online (Sandbox Code Playgroud)

我的routes.rb条目

devise_for :users, :controllers => { :registrations => "users/registrations" }
Run Code Online (Sandbox Code Playgroud)

从我的Gemfile

gem 'devise', :git => "git://github.com/plataformatec/devise.git"
Run Code Online (Sandbox Code Playgroud)

如果您在最新版本的设备上遇到问题,请告诉我.

  • 等等,我想我明白了.我用after_inactive_sign_up_path_for换出了after_sign_up_path_for,现在它重定向到谷歌.所以最后的答案就是这个,以及如上所述更新宝石.非常感谢你. (6认同)