2017-04-18 82 views
0

我的網站允許用戶自由瀏覽,直到他們需要登錄才能繼續使用該服務(點擊「註冊」按鈕並完成註冊過程)。註冊後基於導航的重定向

一旦用戶註冊,我想將它們重定向到他們正在瀏覽的最後有趣的頁面:它可能是點擊註冊按鈕之前的頁面,或者更復雜的頁面。例如,假設用戶瀏覽「核心」內容頁面,然後進入「about_us」頁面,然後嘗試註冊,我寧願將這些用戶重定向到「核心」內容頁面。

我想知道什麼是應該做的最好辦法是,在形式

  • 隱藏PARAMS?聽起來很討厭這個參數一直沿着表格(並且在出現錯誤等時保留它)。
  • 基於會話的信息(某種「智能引用者」url)
  • Page訪問(例如,使用Ahoy.js)

何處/何時對最後一個相關頁面進行「跟蹤」?在控制器中?在JS代碼中查看?

任何提示做類似的事情?

回答

1

通過隱藏的表單字段和會話都有好處。在控制器中使用會話將是開發進程中最簡單的跟蹤方式,但如果用戶打開了多個選項卡,則如果它們在選項卡之間跳轉,則可能導致出現奇怪的頁面流。這是隱藏的表單字段更好一些,但更難以維護。我傾向於去與各屆方法和做類似的控制器動作如下:

#This will store the page they're coming from to get to this action. 
session[:interesting_page] = request.env["HTTP_REFERER"] || root_path 

#Or store the current interesting page within the interesting page's controller action 
session[:interesting_page] = request.original_url 
+1

感謝在這兩種方法的相關評論! –

+0

隱藏的輸入法需要你用POST(像那些#!€WebForms ...)或使用JavaScript來追加路徑? – max

+1

是@max,隱藏字段的方法只有當用戶想要在用戶根據某個特定場景提交表單後控制頁面流時。當用戶點擊一個鏈接時,你也可以通過params和'get'請求來做到這一點,但這往往會導致維護噩夢,我不能真正想到這樣一種情況,它會比其他兩種方法更有用。 – bkunzi01

0

的方法之一就是使用HTTP_REFERER在上籤重定向HTTP_REFERER當然是因爲一些客戶端的限制不發送的它。但是你也可以爭辯說,如果客戶端不發送標題,他們不希望被跟蹤。

另一種解決方案是使用會話:

class ApplicationController 
    after_action :set_referrer, unless: :user_signed_in? 

    def set_referrer 
    session[:referrer] = if request.post? 
     request.fullpath + '/new' 
    elsif request.patch? || request.put? 
     request.fullpath + '/edit' 
    else 
     request.fullpath 
    end 
    end 
end 

class SessionController 
    def create 
    @user = User.find_by(params[:email]) 
       .try(:authenticate, params[:password]) 
    if @user 
     render :new 
    else 
     redirect_to session[:referrer] || root_path 
    end 
    end 
end 
+0

HTTP_REFERRER只包含以前訪問過的頁面正確嗎?在我的情況下,這並沒有幫助,因爲我想要重定向的頁面可能在歷史中任意遠。 –

+0

準確。如果你想存儲一個任意的訪問,你需要使用會話或者僅僅使用一個cookie。 – max

+0

或者你甚至可以使用WebStorage,如果你想流血的優勢。 – max