设计 - 如果未确认帐户,则重定向到页面

时间:2011-06-01 22:29:50

标签: ruby-on-rails-3 devise

我正在尝试重定向用户,如果他们的帐户尚未确认。所以这涉及代码的两个部分:

  1. 首次创建帐户后重定向用户
  2. 如果他们在确认帐户之前尝试登录,请重定向
  3. 我需要第二个帮助。

    我可以通过在我的自定义RegistrationsController中输入after_inactive_sign_up_path_for(resource)来实现。我试过为SessionsController做同样的事情,但它没有用。如果用户尚未确认帐户,我需要过度编写才能正确重定向用户?

1 个答案:

答案 0 :(得分:6)

您可能需要创建自定义监管策略并检查帐户是否需要确认。有点像这样:

# config/initializers/my_strategy.rb
Warden::Strategies.add(:my_strategy) do 
  def valid? 
    true
  end 

  def authenticate! 
    u = User.find_for_authentication(:email => params[:email])
    if u.nil? || !u.valid_password?(params[:password])
      fail(:invalid)
    elsif !u.confirmed?
      fail!("Account needs confirmation.")
      redirect!("your_root_url")
    end
  else
    success!(u)
  end    
end

#config/initializers/devise.rb
config.warden do |manager|  
  manager.default_strategies(:scope => :user).unshift :my_strategy
end

这假定用户名和密码作为参数在请求中传递。您可以查看database_authenticable strategy以获取默认情况下Devise如何处理登录身份验证的示例。