![](/img/trans.png)
[英]Rails and Devise: How to redirect user back to the requested Page after successful login?
[英]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.