【问题标题】:Rails 3 - How can you get access to Devise's current_user in the IRB console?Rails 3 - 如何在 IRB 控制台中访问 Devise 的 current_user?
【发布时间】:2012-03-21 14:35:32
【问题描述】:

我正在 IRB 中进行一些设计/调试,需要登录一个用户,然后才能在我的工作中使用 current_user。

从 Brian Deterling 的 answer 到另一个问题,我已经能够成功登录并使用以下顺序访问页面响应:

>> 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

注意:如果您收到 200 响应,则表示您没有登录。您需要 302 重定向来指示登录成功。请参阅 Tim Santeford 的回答。

我已经能够获取会话信息:

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

我已经尝试了所有我能想到的尝试通过appapp.session 到达current_user,但没有运气。如何获得current_user

【问题讨论】:

    标签: ruby-on-rails-3 session devise irb


    【解决方案1】:

    您可能没有真正登录。要记住的一件事是,我构建在 Warden 之上的 Devise 是机架中间件。

    我尝试使用您的 app.post 方法登录我正在开发的使用 Devise 的应用程序。在发布到登录页面并获得 302 重定向后,app.session 显示了守望者用户 ID。

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

    我能够像这样获取用户:

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

    当我注销然后尝试使用错误密码登录时,我得到 200,然后 app.session 缺少看守用户信息,并且只包含 csrf 令牌和会话 ID,就像您的示例一样。

    顺便说一句:登录后app.controller.current_user 为 nil,即使当守望者用户 ID 在会话中时也是如此。

    【讨论】:

    • Tim - 感谢您指出 200 与 320 的问题。我决定选择 Suguha 的答案是因为它很简单,尽管我测试了你的答案并且它也有效。抱歉,我不能同时选择。
    • 没问题。在您提出问题之前,我不知道您可以使用这样的应用程序对象登录,所以我通过回答学习了一些东西。
    【解决方案2】:

    current_user 是控制器的属性,因此在 app.post('/sign_in', ... 之后,您可以在 Rails 控制台中调用 app.controller.current_user 以获取 User 对象

    【讨论】:

    • 我试过了,current_user 为零。当我执行问题中描述的登录过程时,我得到一个 200 响应并且 app.session 返回 csrf_token,所以我知道我已经登录了。 app.controller 响应页面和数据页面。但是 app.controller.current_user 返回 nil。我正在使用 Devise - 你呢?
    • 看起来 app.post 上的一些批量分配问题导致我的登录失败(在这种情况下,200 响应不是成功的帖子 - 非常混乱。)一旦我收到 302 响应,然后app.controller.current_user 有效。如果没有 Tim Santeford 的回答,我就不会发现登录问题。
    • 我猜是因为 200 表示应用程序成功呈现登录表单(以及提示您无法识别的 Flash 消息)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多