2014-04-03 20 views
0

我已經實現redirect_to_back方法在我的ApplicationController對於未在(from this blogpost簽約用戶:如果鏈接來自電子郵件(在Rails中),我可以在登錄後重定向嗎?

def redirect_to_back_or_default(default = root_url) 
    if request.env["HTTP_REFERER"].present? and request.env["HTTP_REFERER"] != request.env["REQUEST_URI"] 
     redirect_to :back 
    else 
    redirect_to dashboard_url 
    end 
end 

,我使用sessions_controller#創建:

if @user && @user.authenticate(params[:password]) 
    sign_in(@user) 
    redirect_to_back_or_default(dashboard_url) 
else 
    ... 

的問題是,這只是如果請求來自應用程序,則不起作用,而不是直接鏈接,如電子郵件。

是否有解決方案?

+1

在不起作用的情況下實際發生了什麼? –

+0

由於'HTTP_REFERER'不存在,它重定向到'dashboard_url'。 – crispychicken

+0

那麼你希望**它在哪裏嘗試返回鏈接來自電子郵件? –

回答

2

我會建議改變你如何完成這個。如果按照流量之下,我認爲它會產生你正在尋找的結果:

  1. 用戶到達URL(通過單擊鏈接的電子郵件或打字,或別的什麼),但還沒有被驗證。
  2. 商店,用戶是在會議
  3. 重定向到登錄控制器/動作
  4. 爲您存儲的到來URL
  5. 如果存在重定向驗證會話的用戶看後的網址到該URL(並清除存儲的URL到會話中),否則重定向到dashboard_url(如果有人直接導航到登錄控制器/操作,它將不會存在)。
+0

我同意。在重定向之前,您還應該確保您將存儲的URL清除出會話,因爲在那之前它已經完成了工作。 –

+0

@MaxWilliams謝謝!根據您的建議更新。 – Coenwulf

相關問題