2012-10-09 45 views
2

我有一個網站,通過HTTP與自定義域(例如,mywebsite.com)在Heroku上提供。如何在域上使用flash [:notice]?

當用戶想要登錄時,我通過HTTPS將它們重定向到我的Heroku應用程序的非自定義URL(使用Piggyback SSL,因爲我便宜並且不想爲SSL Endpoint付費)。

然後,他們登錄後,我將用戶重定向到我的自定義域,因爲他們的流量不再需要進行加密。

唯一的問題是,在重定向它們之前,我使用flash[:notice](與sinatra-flash)顯示一條消息(例如,「您已成功登錄!」)。但我相信,由於用戶在此過程中從一個域跨越到另一個域,雖然仍在同一服務器上,但由於它們的域X的會話數據不能從域Y訪問,因此它們看不到該消息。

  • 我對問題的理解是否正確?
  • 什麼是解決它的正確方法?

更新於2012年10月12日

所以,我結束了去解決是一個小哈克:

首先,我添加了一個新的數據模型, OneTimeFlash,其中token字段包含每個記錄的隨機字符串。然後我做了它,以便在用戶登錄域X後,我創建了一個新的OneTimeFlash實例,並重定向到Y域與查詢字符串令牌:當服務器在檢測到這種令牌

# The model automatically generates a token before being created. 
one_time_flash = OneTimeFlash.create(:message => "You've successfully logged in!") 
redirect "#{DOMAIN_Y}/flash/#{one_time_flash.token}" 

然後請求時,它會顯示閃光:

get "/flash/:token" do |token| 
    one_time_flash = OneTimeFlash.first(:token => token) 
    flash[:notice] = one_time_flash.message unless one_time_flash.nil? 
    one_time_flash.destroy 
    redirect "/ 
end 

(在ORM爲DataMapper,如果任何人的混淆。)

就像我說:這是哈克,但它的作品。任何人都可以想到這種方法的任何嚴重問題?

+0

節約爲何事到數據庫只是一個臨時消息給用戶? –

+0

@ RailsN00b:因爲我想不出更好的辦法!你可以嗎? –

回答

相關問題