2016-03-15 125 views
0

在我的測試應用程序中,我可以看到在點擊/ sign_in路徑時設置了Cookie,但尚未登錄。它在登錄/登錄時發生更改,所以auth按預期工作。但我希望通過Nginx和cookie存在混亂來匹配請求。rails,devise在登錄之前設置cookie

如何在一條特定路線上禁用cookie?

回答

1

該cookie實際上是由Rack會話中間件創建的,而不是由Devise創建的。在Rails中,cookie只包含一個會話標識符,以便每個訪問者都有一個唯一的會話。

當您登錄時,設計(或成爲確切的守望者)會重置會話 - 因此將帶有新會話標識符的新cookie發送到客戶端。

「如何在一條特定路線上禁用cookie?」

由於Rails和Rack的構建方式,這有點困難。機架中間件在服務器啓動時掛載 - 不是基於每個請求。所以當請求觸及rails路由器(這是一個Rack應用程序)時,它已經通過了大部分中間件。

有像創建中間件的定製件,消除在發送之前餅乾黑客:

class CookieFilter 
    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    Rack::Utils.delete_cookie_header!(headers, '_app-name_session') 
    [status, headers, body] 
    end 
end 

Rails.application.config.middleware.insert_before ::ActionDispatch::Cookies, ::CookieFilter 

但是你milage可能會有所不同,因爲這會破壞依賴於會話cookie如閃爍導軌部件。

+0

這很有趣。那麼人們如何使用Rails作爲上游來實現靜態着陸頁? – kaboom

+0

我不太確定,您可以嘗試就該確切主題提出另一個問題。我會問自己,如果它不是過早的優化,但通常有更簡單的步驟(視圖片段緩存,SQL優化等),可以產生很大的收益。 – max