时间戳未保存在正确的当前用户上

时间:2018-09-12 16:22:03

标签: ruby-on-rails ruby ruby-on-rails-4

以下代码将时间戳保存到session_end中。请不要介意名为session_end的属性名称,它应该为signout_time

class SessionsController < ApplicationController
  def destroy
    clear_all_sessions current_user.id
    save_signout_time(current_user.id)
    reset_session
    redirect_to root_path
  end

  private

  def save_signout_time(id)
    SignupHistory.where(member_id: id)[0].update(session_end: Time.now)
  end
end 

我似乎没有弄错。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

运行clear_all_sessions后,您可能还使当前会话无效。因此,在调用该方法之后,您的current_user方法可能会返回某些匿名用户的详细信息。

也就是说,您两次致电current_user可能会返回不同的用户。解决方法是,先尝试将current_user.id的值保存在destroy方法的变量中,然后仅使用此变量:

def destroy
  id = current_user.id

  clear_all_sessions id
  save_signout_time(id)
  reset_session
  redirect_to root_path
end