2011-10-06 31 views
8

Tôi đang cố gắng để truy cập phiên hiện tại từ after_authenticate callback Warden của (chạy bên dưới lập mưu) trong Rails 3.Làm thế nào để truy cập vào phiên từ Warden/Vạch after_authentication callback trong Rails

Ở phía trên của bộ điều khiển ứng dụng của tôi, tôi muốn để làm một cái gì đó như:

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

mục tiêu cuối cùng là để có một danh sách các ID kỷ lục đã được lưu trữ trong phiên giao dịch trước khi đăng ký và kết hợp chúng với mô hình người dùng sau khi đăng nhập

Bất kỳ trợ giúp sẽ. nhiều ứng dụng reciated.

Trả lời

21

"auth.session" get/bộ dữ liệu trong khóa phiên "warden.user. # {scope} .session".

Giả sử bạn đã dành dụm pending_ids trong ứng dụng ray của bạn:

session[:pending_ids] = ... 

và bạn muốn acces trong móc cai ngục, bạn có thể truy cập vào nó theo cách này:

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

Nó đã cho tôi một thời gian để tìm ra điều đó, vì vậy tôi đoán nó có thể giúp ích cho ai đó.

(ban đầu được lấy từ diegoscataglini.com/2012/02/09/383/manipulating-sessions-in-wardendevise, hiện đã chết).

+1

Điều này làm việc cho tôi, câu trả lời dưới đây auth.session không. – cpuguy83

+0

Cảm ơn! Đây là một mẹo nhỏ tuyệt vời! – LukeS

2

Bạn có thể truy cập vào cửa hàng phiên qua auth:

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

tôi thấy auth.session mà không làm việc. Nó tồn tại, nhưng không giống như phiên từ ngữ cảnh của trình điều khiển. – cpuguy83

+0

Khi tôi làm điều đó tôi nhận được biến địa phương không xác định hoặc phương pháp 'phiên 'cho #

-2

bạn cũng có thể tìm thấy toàn bộ phiên từ auth.raw_session

0

Bạn cũng có thể truy cập phiên thông qua auth.request.session.

Vì vậy, ví dụ bạn sẽ là:

Warden::Manager.after_authentication do |user,auth,opts| 
    user.associate_with_ids(auth.request.session[:pending_ids]) 
end 
Các vấn đề liên quan