您可能需要創建一個自定義監管策略,並檢查帳戶是否需要確認。這種東西:
# 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