簡體   English   中英

成功進入DEVISE后,如何將用戶重定向回以前需要登錄的操作?

[英]After a successful DEVISE login, how to redirect user back to previous action that required login?

我有一個ajax投票按鈕:如果用戶點擊“豎起大拇指”圖像,但沒有登錄,那么他們應該會看到一個對話框,要求他們先登錄。

要執行此對話框,我使用jQuery和facebox綁定到ajax:failure事件。 如果用戶未登錄,Devise將引發401 Unauthorized .facebox在彈出對話框中加載遠程html以進行登錄,該對話框顯示DEVISE登錄表單。

一切正常,除了成功登錄后,用戶被重定向到主頁。 如果用戶被重定向回他們正在查看的帖子,那么他們可以繼續投票,這將更加直觀。

是否有實現此行為的最佳實踐方法?

謝謝。

我在Rails 3上使用Authlogic執行以下操作,也許您可​​以使用它或執行類似的操作:

class ApplicationController < ActionController::Base
  after_filter :store_location
private
  def store_location
    session[:return_to] = request.fullpath
  end

  def clear_stored_location
    session[:return_to] = nil
  end

  def redirect_back_or_to(alternate)
    redirect_to(session[:return_to] || alternate)
    clear_stored_location
  end
end

然后,您可以在登錄操作中使用redirect_back_or_to dashboard_path

對於某些控制器/操作,我不想存儲位置(例如登錄頁面)。 對於那些我只是跳過過濾器:

class UserController < ApplicationController
  skip_after_filter :store_location
end

在Devise wiki中還有一個關於這樣做的頁面: https//github.com/plataformatec/devise/wiki/How-To :-Redirect-to-a-specific-page-on-successful-sign-in

在ApplicationController中寫如下:

after_filter :store_location
def store_location
  session[:previous_urls] ||= []
  # store unique urls only
  session[:previous_urls].prepend request.fullpath if session[:previous_urls].first != request.fullpath
  # For Rails < 3.2
  # session[:previous_urls].unshift request.fullpath if session[:previous_urls].first != request.fullpath 
  session[:previous_urls].pop if session[:previous_urls].count > 2
end
def after_sign_in_path_for(resource)
  session[:previous_urls].last || root_path
end

資料來源: https//github.com/plataformatec/devise/wiki/How-To : -Redirect-back-to-current-page-after-sign-in,-sign-out,-sign-up,-update

使用cookie。 獲取他們嘗試去的window.location.href並將其存儲為cookie。 在您的主頁上,檢查文檔就緒功能中是否存在此cookier,如果存在則重定向

暫無
暫無

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

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