2011-02-07 111 views
1

我正在嘗試將用戶重定向到他們登錄的最後一個頁面(使用模式) - 正在工作。從特定頁面重定向

if user 
    # Protects against session fixation attacks, causes request forgery 
    # protection if user resubmits an earlier form using back 
    # button. Uncomment if you understand the tradeoffs. 
    # reset_session 
    self.current_user = user 
    new_cookie_flag = (params[:remember_me] == "1") 
    handle_remember_cookie! new_cookie_flag 
    format.html { 
     if @invitation.try(:invitee_email) == user.email 
     redirect_to(edit_invitation_path(@invitation)) 
     else 
     begin 
     # loop check 
     if session[:last_back] != request.env['HTTP_REFERER'] 
     redirect_to(:back) 
     session[:last_back] = request.env['HTTP_REFERER'] 
     else 
     # raise on error 
     raise ActionController::RedirectBackError 
     end 
     rescue ActionController::RedirectBackError 
     # fallback on loop or other :back error 
     redirect_to(:action => :index) 
    end 
end 

如果用戶登錄失敗 - 他們是在會話/新重定向到登錄頁面。

我不希望他們在成功登錄後返回此頁面,所以如果他們恰好來自session/new,我將如何將他們重定向到新的/路徑?

回答

1

我認爲有兩種方法來解決這個問題:

  1. 而不是在登錄重新定向,使用Ajax請求發佈的數據,只是如果登錄失敗不重定向。如果登錄成功,請使用javascript重定向。
  2. 在應用程序控制器中使用before_filter,當用戶註銷時,會將當前頁面作爲重定向頁面存儲在會話中。在您不想記住的頁面上跳過此過濾器,如會話/新頁面。用戶登錄後,檢查會話是否有重定向頁面,如果存在,則重定向到該頁面。這樣,無論用戶訪問多少次會話/新會話,他們都不會在登錄後重定向到那裏。 (你也應該爲註銷頁面做同樣的事情 - 跳過之前的過濾器)。