【问题标题】:Rails 3 Devise redirect within custom strategyRails 3 在自定义策略中设计重定向
【发布时间】:2011-11-22 05:35:42
【问题描述】:

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

我实施了一个自定义的设计/守望者策略来针对第 3 方 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

建议?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      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

      【讨论】:

      • 试过了,它甚至没有被调用,所以我怀疑我在我的自定义策略代码中改变了控制流。我认为这需要在devise.rb 中的自定义策略代码中完成。
      猜你喜欢
      • 2011-03-31
      • 1970-01-01
      • 2014-10-12
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      相关资源
      最近更新 更多