Rails 3在自定义策略中设计重定向

时间:2011-09-21 18:50:27

标签: ruby-on-rails ruby-on-rails-3 devise

我的设置:Rails 3.0.9,Ruby 1.9.2,Devise 1.3.4

我实施了自定义Devise / Warden策略来对第三方API进行身份验证,如果成功,则会在第一次创建新用户。我应该澄清用户创建是在devise.rb

中的自定义策略代码中完成的
devise.rb
config.warden do |manager|
  manager.strategies.add(:mls_strategy) do
    def authenticate!
      ... authenticate against 3rd party API...
      if res.body =~ /success/
        u = User.find_or_initialize_by_email(params[:user][:email])
        if u.new_record?
          u.save
        end
      success!(u)
    end
  end
end

除了创建时,用户看到登录页面仍然显示Signed in successfully的警告。期望的行为是用户被重定向到应用程序的根目录,我试图通过在创建用户后添加redirect_to "/"来尝试,但它找不到redirect_to方法,我甚至不确定这是最好的这样做的方式。

我也尝试将此添加到routes.rb但没有成功

namespace :user do
  root :to => "blah#index"
end

建议?

2 个答案:

答案 0 :(得分:2)

Argh,事实证明,我需要做的就是使用save!而不仅仅是save。显然save!会将其持久存储到数据库中,而save会延迟它,导致Devise无法将用户识别为已通过身份验证。

答案 1 :(得分:0)

您需要制作一个新的控制器“注册”并自定义适当的方法:

class RegistrationsController < Devise::RegistrationsController
  protected

  def after_sign_up_path_for(resource)
    '/an/example/path'
  end
end

您可以在此处找到更多信息:https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-up-%28registration%29