【问题标题】:current_user set to nil in rails / devise在 rails / devise 中 current_user 设置为 nil
【发布时间】:2014-10-30 13:37:23
【问题描述】:

在使用 rails 4.1.3 和设计 3.0.4 时遇到了一个非常奇怪的错误。试图处理匿名登录。用户要么通过 devise 登录,要么在之前的表单中填写了姓名和电子邮件。

控制器中的以下代码:

   logger.debug "current_user before:#{current_user.inspect}"
   if(current_user.nil?)
     current_user = User.create(:last_name => params[:guest_username], :email => params[:guest_email])
     logger.debug "Guest user created" 
   end
   logger.debug "current_user after:#{current_user.inspect}"

以下日志输出:

D, [2014-10-30T14:10:15.627130 #2148] DEBUG -- : current_user before:#<User _id: 52ffe1b35043001fa8000000, created_at: 2014-02-15 21:52:51 UTC, updated_at: 2014-10-30 13:00:47 UTC, email: "xxx@yyy.com", encrypted_password: "$2a$10$r5wXs97N.HIAp9bp5GZBaOUt8R5.S/Z/2PhcpF0xaIVuTD4BpZrmO", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 134, current_sign_in_at: 2014-10-30 13:00:47 UTC, last_sign_in_at: 2014-10-30 12:57:35 UTC, current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", confirmation_token: nil, confirmed_at: 2014-02-15 21:53:04 UTC, confirmation_sent_at: 2014-02-15 21:52:51 UTC, unconfirmed_email: nil, image: "", first_name: "Dave", last_name: "Something", roles_mask: 7>
D, [2014-10-30T14:10:15.629130 #2148] DEBUG -- : current_user after:nil

所以这就是我不明白的,为什么即使 if 块中的代码没有被执行,current_user 对象也被重置为 nil...

发生了什么事?

提前致谢 - 迈克

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

    你需要做的

    sign_in(current_user)
    

    像这样:

    if(current_user.nil?)
      current_user = User.create(:last_name => params[:guest_username], :email => params[:guest_email])
      sign_in(current_user)
      logger.debug "Guest user created" 
    end
    logger.debug "current_user after:#{current_user.inspect}"
    

    或设置实例变量:

    if(current_user.nil?)
      @current_user = User.create(:last_name => params[:guest_username], :email => params[:guest_email])
      logger.debug "Guest user created" 
    end
    logger.debug "current_user after:#{current_user.inspect}"
    

    【讨论】:

    • 嗨,我的问题是当用户通过设计正确登录并因此定义了 current_user 时。然后不知何故被销毁,请参阅日志输出。我不明白为什么......
    • 这是因为您尝试自己创建用户,让devise的会话控制器为您处理,如果您必须更改其代码,请确保您拥有完全相同或几乎相同的代码实现.
    猜你喜欢
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多