簡體   English   中英

Rails - 正確地重定向到上一頁

[英]Rails - redirecting to previous page properly

在我的應用程序中,我試圖強制用戶登錄以執行某些操作。 當他們在未簽名時嘗試執行這些操作時,會將其重定向到“登錄”頁面,一旦他們登錄,他們就會被重定向回他們嘗試訪問的頁面。 我使用下面的代碼完成了所有這些工作。

控制器代碼

if !(signed_in?)
  session[:return_to] = newcompany_path
  redirect_to signin_path
  flash[:notice] = "You must be signed in to add companies."
else
      @company = Company.new
  @primary_field = @@fields
end

...

redirect_path = session[:return_to]
if user && user.authenticate(params[:session][:password])
    sign_in user
    session[:return_to] = nil
    if (redirect_path == nil)
      redirect_to user
    else
      redirect_to redirect_path
    end
else

我遇到的問題是,如果用戶點擊登錄頁面而沒有實際登錄,則session[return_to]變量未正確清除,如果他們稍后返回登錄,則會將其重定向到錯誤的頁面。

那么,如何設置它,如果用戶點擊登錄頁面,會話[:redirect_to]變量會被重置?

您可以在查詢字符串參數而不是會話中傳遞return_to路徑,並將其與登錄表單一起提交,以便它僅適用於該表單,而不是后續請求。

重定向到登錄表單時,它看起來像:

redirect_to signin_path(return_to: newcompany_path)

然后,在您的登錄表單中,確保包含一個帶有return_to值的隱藏字段,如:

hidden_field_tag :return_to, params[:return_to]

然后在您的控制器操作中進行登錄,您將檢查params[:return_to]而不是session[:return_to]以獲取所需的路徑。

這是你在找什么?

redirect_to request.referrer

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM