2013-10-30 24 views
1

我的Rails應用程序目前可example.org,但我想切換到example.com堅持用戶會話切換到新域名時(Ruby on Rails的)

做一個通配符301在routes.rb重定向不是問題,但我想堅持用戶會話以及。由於新域名將無法訪問舊域名的cookie,因此將用戶重定向到新域名並仍然登錄的最佳(安全且儘可能簡單)的方式是?

我發現許多線程談論使用複雜的身份驗證令牌方法設置跨域Web應用程序,但我正在尋找一次性單向遷移,所以我希望解決方案會更簡單爲了這。

有什麼建議嗎?

我正在使用Ruby on Rails 3,OmniAuth,並使用默認的「cookie_store」作爲我的會話存儲。

回答

2

您可以像使用身份驗證令牌發送電子郵件鏈接一樣來執行此操作。檢查以驗證cookie是在example.org正確的,如果是這樣,他們重定向到:

http://example.com?token=<their token> 

,然後檢查,以確保令牌匹配你在DB,當他們到達的一個。如果令牌匹配,請爲example.com域創建會話Cookie,然後更改數據庫中的令牌。

這將成功從一個域轉移到另一個域,同時通過更改數據庫中的身份驗證令牌提供新域(通過cookie)的持久登錄並關閉它們後面的門。

編輯

下面來回答你的問題,我不認爲你需要中間件或任何幻想。你可以在example.org的應用控制器濾波器之前做一個簡單的,是這樣的:

before_filter :redirect_to_dot_com 
... 
def redirect_to_dot_com 
    url = "http://example.com" + request.fullpath 
    url= destination + (url.include?('?') ? '&' : '?') + "token=#{current_user.token}" if signed_in? 
    redirect_to url, status: 301 
end 

這將用戶重定向無論哪種方式,和令牌追加到查詢,如果用戶已登錄上。 org網站。

+0

你會推薦在Rack Middleware或其他地方做這個嗎?用戶可以訪問'example.org'上的任何頁面,並且應該將301重定向到'example.com'上添加了令牌的同一頁面。 – Marc