2012-02-28 29 views
8

在rails 2.3.8站點上,我在每個頁面上都有登錄鏈接(將用戶帶到單獨的登錄頁面)。成功登錄後,用戶當前被重定向到root用戶。相反,我想重定向到他們之前查看的頁面。登錄後將用戶返回上一頁(Rails)

我一直在使用request.referer嘗試:

redirect_back_or_default(request.referer) 

其中redirect_back_or_default:

def redirect_back_or_default(default) 
    redirect_to(session[:return_to] || default) 
    session[:return_to] = nil 
end 

但產生 「拒絕訪問」 錯誤,即使登錄成功。

+0

這看起來不錯,你確定他們實際上登錄了嗎? – Chap 2012-02-28 21:07:40

+0

是的,他們肯定會登錄(可以查看先前無法訪問的頁面,登錄鏈接更改爲用戶頁面鏈接,登錄鏈接更改爲登出等)。即使用戶從根用戶登錄,也會發生錯誤。 – Exupery 2012-02-28 21:19:10

+0

你可以發佈你的會話控制器代碼嗎? – PhillipKregg 2012-02-28 21:19:25

回答

13

,而不是試圖重定向到引薦,我會設置會話[:的return_to]

你需要一個能夠在所有你的行動身份驗證之前運行過濾器之前:

def store_return_to 
    session[:return_to] = request.url 
end 

然後改變你的重定向到

redirect_back_or_default() 
+0

正是我在尋找的內容,非常感謝! – Exupery 2012-03-02 15:51:46

+0

謝謝你,我花了幾個小時才發現StackOverflow中的其他答案並沒有工作。 – kakubei 2012-04-23 12:04:09

+0

是的。這是一個很好的非設計解決方案。這就是我很難找到的,所以我想我會在評論中輸入「不使用Devise」,所以它更容易找到! – 2016-02-04 17:13:08

相關問題