您可能需要创建一个自定义监管策略,并检查帐户是否需要确认。这种东西:
# 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如何在默认情况下处理登录身份验证的示例。
感谢您的帮助。你知道何时使用app/views/devise/confirmations/new.html.erb吗?似乎这应该是设计的默认功能,对吗? – RyanJM 2011-06-06 13:46:01
只要您点击“重新发送确认”链接,假设您在模型中有':confirmable',就应该使用它。 – David 2011-06-06 20:37:11
谢谢你用监狱战略指引我朝着正确的方向。不知道我会发现这一点。 – RyanJM 2011-06-08 16:30:43