2012-04-26 23 views

Trả lời

23

Ít nhất trên hệ thống của tôi (đường ray 3.2, đưa ra 2.0.4), bạn có thể làm điều đó như thế này:

session là:

{"session_id"=>"be02f27d504672bab3408a0ccf5c1db5", "_csrf_token"=>"DKaCNX3/DMloaCHbVSNq33NJjYIg51X0z/p2T1VRzfY=", "warden.user.user.key"=>["User", [3], "$2a$10$5HFWNuz5p6fT3Z4ZvJfQq."]} 

session["warden.user.user.key"][1][0], sau đó là 3.

Vì vậy, tôi muốn thấy nó như:

User.find(session["warden.user.user.key"][1][0]) 
+10

Trên Rails 4.2.1, Devise 3.4.1 bạn sẽ muốn sử dụng User.find (phiên ["warden.user.user.key"] [0] [0]) –

+0

Cảm ơn. Ví dụ này là xấu, nhưng nó hoạt động. Cảm ơn một lần nữa. Ví dụ này cho cookie: http://stackoverflow.com/a/43549108/5754223 – artamonovdev

3

Tôi không chắc chắn những gì bạn đang cố gắng để thực hiện nhưng sẽ cố gắng trả lời

Nếu bạn muốn chỉ có người dùng từ phiên hiện tại , một cách đơn giản sẽ được lưu trữ id của mình trên phiên, ví dụ:

def login(username, pass) 
    # do the usual authentication stuff and get user 
    if logedin 
    session[:user_id] = user.id 
    end 
end 

Sau đó được người dùng hiện thời sẽ là một cái gì đó giống như

current_user =User.find(session[:user_id]) 

Nếu những gì bạn muốn là tìm tất cả những người dùng hiện đang đăng nhập, tôi nghĩ rằng bạn cần phải cấu hình ứng dụng của bạn để lưu phiên tại DB, vì xác định trước là dữ liệu phiên được lưu trữ trong cookie trong trình duyệt . Để biết thêm thông tin về vấn đề này kiểm tra câu trả lời này How to track online users in Rails?


EDIT: Chỉ cần nhận thấy bạn đang sử dụng đưa ra vì vậy cách đầu tiên là thực sự ở đó đợi em. Bạn chỉ cần gọi phương thức current_user ở bất kỳ bộ điều khiển nào. Cách thứ hai kiểm tra câu trả lời này "Who's Online" using Devise in Rails

Các vấn đề liên quan