2011-06-01 48 views
2

我想重定向用户,如果他们的帐户尚未确认。因此,这涉及到代码的两个部分:设计 - 重定向到页面如果帐户未被确认

  1. 将用户重定向后,他们首先创建帐户
  2. 重定向他们,如果他们试图确认该帐户

我需要的帮助之前登录第二。

第一次我可以通过在我的自定义RegistrationsController中放入after_inactive_sign_up_path_for(resource)来完成。我试图为SessionsController做同样的事情,但它没有奏效。如果用户尚未确认帐户,为了正确重定向用户,我需要写多少次?

回答

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如何在默认情况下处理登录身份验证的示例。

+0

感谢您的帮助。你知道何时使用app/views/devise/confirmations/new.html.erb吗?似乎这应该是设计的默认功能,对吗? – RyanJM 2011-06-06 13:46:01

+0

只要您点击“重新发送确认”链接,假设您在模型中有':confirmable',就应该使用它。 – David 2011-06-06 20:37:11

+1

谢谢你用监狱战略指引我朝着正确的方向。不知道我会发现这一点。 – RyanJM 2011-06-08 16:30:43

相关问题