2011-09-21 66 views
2

我的設置中重定向:Rails的3.0.9,1.9.2紅寶石,設計1.3.4Rails 3的設計定製策略

我實現了一個自定義的設計/獄長戰略,以防止第三方API,如果成功驗證,新用戶首次創建。我要澄清的是,用戶創建在devise.rb

devise.rb 
config.warden do |manager| 
    manager.strategies.add(:mls_strategy) do 
    def authenticate! 
     ... authenticate against 3rd party API... 
     if res.body =~ /success/ 
     u = User.find_or_initialize_by_email(params[:user][:email]) 
     if u.new_record? 
      u.save 
     end 
     success!(u) 
    end 
    end 
end 

用戶定製的策略代碼中做到這一點不同在於在創建,用戶與警報說Signed in successfully看到登錄頁面還是所有的作品。期望的行爲是用戶被重定向到應用程序的根目錄,我嘗試在創建用戶之後添加redirect_to "/",但找不到redirect_to方法,我甚至不確定這是執行此操作的最佳方式。

我自己也嘗試沒有成功加入這routes.rb

namespace :user do 
    root :to => "blah#index" 
end 

建議?

回答

2

哎呀,事實證明,我需要做的是使用save!而不是僅僅使用save。顯然save!會將其保留到數據庫中,而save會延遲它導致Devise無法將用戶識別爲已認證。

+0

不錯,我很高興你解決了它:) –

0

你需要做一個新的控制器「註冊記憶」和自定義適當的方法:

class RegistrationsController < Devise::RegistrationsController 
    protected 

    def after_sign_up_path_for(resource) 
    '/an/example/path' 
    end 
end 

,你可以在這裏找到更多的信息:https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-up-%28registration%29

+0

試過了,它甚至沒有被調用,所以我懷疑我改變了我的自定義策略代碼中的控制流。我認爲這需要在'devise.rb'中的自定義策略代碼中完成。 – Bob