2011-06-01 46 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

相關問題