2011-10-06 27 views
8

我試圖訪問從守望者after_authenticate回調當前會話(設計下運行),在滑軌3如何從監獄長訪問會話/設計Rails中after_authentication回調

在我想我的應用程序控制器頂部做這樣的事情:

Warden::Manager.after_authentication do |user,auth,opts| 
    user.associate_with_ids(session[:pending_ids]) 
end 

的最終目標是把已存儲在會話記錄ID列表註冊之前,並將其與用戶模式登錄後關聯

任何幫助。很多應用程序reciated。

回答

21

auth.session」 得到整個會話/設置數據會話密鑰「warden.user。#{scope} .session」。

假設你有你的Rails應用程序中保存pending_ids:

session[:pending_ids] = ... 

,你在看守鉤想存取權限,你可以這樣訪問:

Warden::Manager.after_authentication do |user,auth,opts| 
    user.associate_with_ids(auth.env['rack.session'][:pending_ids]) 
end 

我花了一段時間發現這一點,所以我想這可能對某人有所幫助。

(最初取自diegoscataglini.com/2012/02/09/383/manipulating-sessions-in-wardendevise,現已死亡)。

+1

這對我來說,auth.session下面的答案沒有。 – cpuguy83

+0

謝謝!這是一個很棒的小技巧! – LukeS

2

您可以通過auth訪問會話存儲:

Warden::Manager.after_authentication do |user,auth,opts| 
    user.associate_with_ids(auth.session[:pending_ids]) 
end 
+0

我發現auth.session沒有工作。它存在,但與控制器上下文中的會話不同。 – cpuguy83

+0

當我這樣做時,我得到了未定義的局部變量或方法'會話'爲#

0

您還可以通過auth.request.session訪問會話。

所以,你的例子是:

Warden::Manager.after_authentication do |user,auth,opts| 
    user.associate_with_ids(auth.request.session[:pending_ids]) 
end