有沒有辦法讓我將URL傳遞到Devise登錄頁面,這樣當用戶登錄時,他/她會被重定向回該URL?Rails Devise - 通過URL登錄
喜歡的東西:
/login?passthru=/somethingawesome
還是更設置會話變量?
有沒有辦法讓我將URL傳遞到Devise登錄頁面,這樣當用戶登錄時,他/她會被重定向回該URL?Rails Devise - 通過URL登錄
喜歡的東西:
/login?passthru=/somethingawesome
還是更設置會話變量?
具有存儲重定向位置的方法和訪問application_controller
所存儲的重新導向位置的方法:
def store_location(path)
session[:return_to] = request.request_uri || path
end
def redirect_back_or_default(default)
redirect_to(session[:return_to] || default)
session[:return_to] = nil
end
覆蓋的after_sign_in_path_for方法將用戶重定向到所需的位置:
def after_sign_in_path_for(resource_or_scope)
redirect_back_or_default(resource_or_scope)
end
Devise Wiki:如何:Redirect to a specific page on successful sign in out
順便說一下,上述方法未經測試,您應該測試它。
這裏就是我所做的
1)在你的模板設置您的sign_in登錄 如下:IM request.fullpath路過這裏,你可以用任何你想要替換這樣的一個例子。
<%= link_to "Log in", new_user_session_path(:passthru => request.fullpath %>
2)然後修改的ApplicationController如下:我們添加的before_filter如果存在這臺中繼的會話。然後我們重寫after_sign_in_path_for以查看會話中的passthru。如果不存在,它將默認爲root_path。只要你在任何地方始終使用參數處理登錄,這應該可以工作。雖然它可能需要一些調整。
before_filter :store_location
def store_location
session[:passthru] = params[:passthru] if params[:passthru]
end
def redirect_back_or_default(default)
session[:passthru] || root_path
end
def after_sign_in_path_for(resource_or_scope)
redirect_back_or_default(resource_or_scope)
end
更新有新版本(2.2.0紅寶石,Rails的4.2.0,3.2.4設計):
Application_Controller.rb
before_action :store_location
private
def store_location
session[:requestUri] = params[:requestUri] if params[:requestUri].present?
end
設計Sessions_Controller.rb
# Custom After Sign in Path
def after_sign_in_path_for(resource_name)
if session[:requestUri]
session.delete(:requestUri)
else
super
end
end
查看xxxx.html.erb
<%= link_to ('Get This'), some_require_auth_path(@something.id, requestUri: request.fullpath), class: 'button' %>
大,感謝您的回答.. – slotishtype 2011-12-19 09:37:39