2013-03-06 37 views
1

我見過很多關於將用戶重定向到他使用設計的最後一頁的問題。有一個很好的解釋和示例代碼here設計:重定向到用戶最初嘗試訪問的受限頁面

這對我有用,這是我想要的有時但其他時間,我想重定向到用戶試圖訪問的受限頁面而不是他以前的頁面。例如:

  1. 用戶點擊「創建新的崗位按鈕」,這是主頁
  2. 在這打的帖子控制器,它與需要用戶的before_filter保護的登錄
  3. 新動作用戶被重定向到登錄頁面
  4. 登錄後,用戶現在被重定向到主頁。
  5. 但是,在這種情況下,我希望將用戶重定向到新操作,並使用他試圖訪問的新帖子表單,而不是主頁。
+0

GitHub上的示例代碼完全符合您的描述!? – Robin 2013-03-06 07:10:33

+0

我測試過了。它重定向到用戶所在的最後一頁,而不是他正在嘗試訪問的那一頁。即在我的示例中,示例代碼會將用戶重定向到主頁,而不是新的發佈頁面。 – sq1020 2013-03-06 07:31:00

+0

所以你應該只在用戶試圖訪問受限制頁面時設置這個會話變量? – Robin 2013-03-06 07:57:48

回答

2

所以我意識到爲了重定向到用戶在登錄後嘗試訪問的受保護頁面,store_location函數需要是before_filter而不是after_filter。

before_filter :store_location 

def store_location 
    # store last url as long as it isn't a /users path 
    session[:previous_url] = request.fullpath unless request.fullpath =~ /\/users/ 
end 

def after_sign_in_path_for(resource) 
    session[:previous_url] || root_path 
end 

這是有道理的,因爲,因爲權當我嘗試訪問new_post_path例如執行store_location功能的會話變量被在這種情況下被保護的頁面設置。當你的store_location像github代碼示例中的after_filter一樣時,上次執行store_location函數時是當我到達非保護動作時,即我的示例中的主頁。

+0

非常感謝!在使用您引用的建議代碼後,我遇到了完全相同的問題。發現任何使before_filter導致任何問題的情況?看起來很明顯,現在你已經解釋了它,爲什麼他們給出的例子不是這樣? – Polsonby 2015-04-21 12:29:08

0

你之前重定向到登錄頁面,下面的代碼片段設置當前路徑:成功登錄後

session[:previous_url] = request.fullpath unless request.fullpath =~ /\/users/ 

檢查這個會話變量,如果是設置好的,然後重定向到它。

相關問題