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

Rya*_*nJM 2 devise ruby-on-rails-3

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

  1. 首次创建帐户后重定向用户
  2. 如果他们在确认帐户之前尝试登录,请重定向他们

我需要帮助第二个.

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

Dav*_*vid 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
Run Code Online (Sandbox Code Playgroud)

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