2012-03-03 23 views
26

Tôi đang làm một số thiết kế/gỡ lỗi trong IRB và cần phải đăng nhập một người dùng và sau đó có thể sử dụng current_user trong nỗ lực của tôi.Rails 3 - Làm thế nào để bạn có thể truy cập vào current_user của Devise trong IRB console?

Từ Brian Deterling của answer cho câu hỏi khác, tôi đã có thể đăng nhập thành công và truy cập vào một phản ứng trang với chuỗi này:

>> ApplicationController.allow_forgery_protection = false 
>> app.post('/sign_in', {"user"=>{"login"=>"some-login-id", "password"=>"some-password"}}) 
>> app.get '/some_other_path_that_only_works_if_logged_in' 
>> pp app.response.body 

LƯU Ý:. Nếu bạn nhận được một phản ứng 200 bạn chưa đăng nhập Bạn cần chuyển hướng 302 để cho biết thông tin đăng nhập thành công. Xem câu trả lời của Tim Santeford.

tôi đã có thể nhận được thông tin phiên:

1.9.3-p125 :009 > app.session 
=> {"_csrf_token"=>"1yAn0jI4VWzUH84PNTH0lVhjpY98e9echQGS4=", "session_id"=>"89984667d30d0fec71f2a5cbb9017e24"} 

Tôi đã thử tất cả mọi thứ tôi có thể nghĩ ra để cố gắng để có được current_user qua appapp.session, nhưng không có may mắn. Làm thế nào tôi có thể nhận được current_user?

Trả lời

26

current_user là một tài sản của bộ điều khiển như vậy sau khi app.post('/sign_in', ... bạn có thể gọi app.controller.current_user trong đường ray giao diện điều khiển của bạn để có được những đối tượng tài

+2

Tôi đã thử nó và nó thực sự hoạt động. – Pierre

+1

Tôi đã thử nó và current_user là không. Khi tôi làm thủ tục đăng nhập được mô tả trong câu hỏi, tôi nhận được phản hồi 200 và app.session trả về csrf_token, vì vậy tôi biết tôi đã đăng nhập OK. app.controller đáp ứng với các trang và các trang dữ liệu. Nhưng app.controller.current_user trả về nil. Tôi đang sử dụng Devise - phải không? –

+0

Có vẻ như một số vấn đề gán hàng loạt trên app.post đã khiến thông tin đăng nhập của tôi không thành công (phản hồi 200 không phải là bài đăng thành công trong trường hợp này - rất khó hiểu.) Khi tôi nhận được phản hồi 302, sau đó app.controller.current_user hoạt động. Tôi sẽ không tìm ra vấn đề đăng nhập mà không có câu trả lời của Tim Santeford. –

4

Nó có thể được có thể là bạn đang không thực sự đăng nhập. Một điều cần lưu ý là mà Devise tôi xây dựng trên đầu trang của Warden vốn là phần mềm trung gian.

Tôi đã thử phương pháp đăng nhập app.post của bạn trên một ứng dụng tôi đang làm việc trên đó sử dụng Devise. Sau khi đăng lên trang đăng nhập và nhận được chuyển hướng 302, app.session hiển thị id người dùng quản trị viên.

>> app.session 
{ 
"_csrf_token"=>"dT0/BqgLb84bnE+f1g...", 
"warden.user.user.key"=>["User", [42843], "$2a$10$1OU.1BixIba..."], 
"session_id"=>"0dd49c05ff4e6362c207c6eb877f86cd" 
} 

tôi đã có thể lấy người sử dụng như thế này:

>> current_user = User.find(app.session["warden.user.user.key"][1][0]) 

Khi tôi đăng xuất và sau đó cố gắng đăng nhập bằng mật khẩu xấu tôi nhận được một 200 và sau đó là app.session thiếu quản lý thông tin người dùng và chỉ chứa mã thông báo csrf và id phiên như ví dụ của bạn.

BTW: Sau khi đăng nhập app.controller.current_user là không ngay cả khi id người dùng làm việc trong phiên.

+0

Tim - Cảm ơn bạn đã chỉ ra vấn đề 200 so với 320. Tôi quyết định chọn câu trả lời của Suguha vì sự đơn giản của nó, mặc dù tôi đã thử nghiệm của bạn và nó cũng hoạt động. Xin lỗi tôi không thể chọn cả hai. –

+0

Không sao cả. Tôi không biết bạn có thể đăng nhập bằng cách sử dụng các đối tượng ứng dụng như thế này trước câu hỏi của bạn vì vậy tôi tìm hiểu một cái gì đó bằng cách trả lời. –

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