我使用的是Restful Authentication,我希望能夠以我們網站上的不同用戶身份登錄,以調查他們可能遇到的問題(請參閱他們看到的內容)。由於所有密碼都是經過加密的,我顯然不能只使用他們的密碼。強制靜默認證以特定用戶身份登錄(管理員功能)?
那麼,我該如何強制一個會話作爲特定用戶登錄?
我使用的是Restful Authentication,我希望能夠以我們網站上的不同用戶身份登錄,以調查他們可能遇到的問題(請參閱他們看到的內容)。由於所有密碼都是經過加密的,我顯然不能只使用他們的密碼。強制靜默認證以特定用戶身份登錄(管理員功能)?
那麼,我該如何強制一個會話作爲特定用戶登錄?
在你sessions_controller
添加動作impersonate
這樣的:
def impersonate
user = User.find(params[:id])
logout_killing_session!
self.current_user = user
flash[:notice] = t(:logged_in)
redirect_to root_url
end
然後在你的路線延長會話資源與成員impersonate
:
map.resource :session, :member => {:impersonate => :post}
最後,在某處你的管理視圖爲每個用戶添加一個名爲「Impersonate」的按鈕。它必須看起來像這樣(假設用戶在本地變量user
):
<%= button_to "Impersonate", impersonate_session_path(:id => user.id) %>
使用這種方法還能避免重寫任何跟蹤數據,如上次登錄時間等
PS不要忘記在會話控制器中需要管理員impersonate
操作。
簡單地覆蓋session[:user_id]
與你想要的用戶的ID。一種簡單的方法是讓用戶以管理員身份登錄,然後爲用戶提供一個用戶名下拉菜單。當他們提交表格時,請讓控制器設置session[:user_id]
,然後重新加載current_user
。管理員將會'成爲'該用戶。