<?xml version="1.0" encoding="UTF-8"?>
<wiki>
  <body>&lt;p&gt;By default, Acts as Authenticated will store the id of the user object in the session, not the whole object. This ensures that your session is never stale, but it costs an extra db query per request. Here&#8217;s how to modify the Authenticated System module to store the whole user object:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Accesses the current &amp;lt;%= file_name %&amp;gt; from the session.&lt;br /&gt;
  def current_user&lt;br /&gt;
    session[:user]&lt;br /&gt;
  end&lt;/li&gt;
&lt;/ol&gt;
&lt;ol&gt;
	&lt;li&gt;Store the given user in the session.&lt;br /&gt;
  def current_user=(new_user)&lt;br /&gt;
    session[:user] = new_user&lt;br /&gt;
  end&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;And to make tests work, you need to change this in lib/authenticated_test_helper:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;remove .id from users(users)&lt;br /&gt;
  def login_as(user)&lt;br /&gt;
    @request.session[:user] = user ? users(user) : nil&lt;br /&gt;
  end&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Or if you also plan to use userstamp do this instead:&lt;br /&gt;
applicaton.rb should resemble:&lt;/p&gt;
&lt;p&gt;class ApplicationController &amp;lt; ActionController::Base&lt;br /&gt;
  include AuthenticatedSystem&lt;br /&gt;
  before_filter do |c|&lt;br /&gt;
    if !c.session[:user].nil?&lt;br /&gt;
      User.current_user = c.session[:user]&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
end&lt;/p&gt;
&lt;p&gt;Add this line to user.rb model:&lt;/p&gt;
cattr_accessor :current_user
&lt;p&gt;Changed portion of lib/authenticated_system.rb:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Preloads &lt;code&gt;current_user with the user model if they're logged in.
    def logged_in?
      (&lt;/code&gt;current_user ||= session[:user_id] ? User.find_by_id(session[:user_id]) : :false).is_a?(User)&lt;br /&gt;
    end&lt;/li&gt;
&lt;/ol&gt;
&lt;ol&gt;
	&lt;li&gt;Accesses the current user from the session.&lt;br /&gt;
    def current_user&lt;br /&gt;
      @current_user if logged_in?&lt;br /&gt;
    end&lt;/li&gt;
&lt;/ol&gt;
&lt;ol&gt;
	&lt;li&gt;Store the given user in the session.&lt;br /&gt;
    def current_user=(new_user)&lt;br /&gt;
      session[:user] = new_user&lt;br /&gt;
      session[:user_id] = new_user.nil? ? nil : new_user.id&lt;br /&gt;
      @current_user = new_user&lt;br /&gt;
    end&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Changed portion of lib/authenticated_test_helper.rb:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Sets the current user in the session from the user fixtures.&lt;br /&gt;
  def login_as(user)&lt;br /&gt;
    @request.session[:user_id] = user ? users(user).id : nil&lt;br /&gt;
  end&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Changed portion of test/funtional/account_controller_test.rb:&lt;/p&gt;
def test_should_login_and_redirect
post :login, :login =&amp;gt; &amp;#8216;quentin&amp;#8217;, :password =&amp;gt; &amp;#8216;test&amp;#8217;
assert session[:user]
assert session[:user_id]
assert_response :redirect
end
def test_should_fail_login_and_not_redirect
post :login, :login =&amp;gt; &amp;#8216;quentin&amp;#8217;, :password =&amp;gt; &amp;#8216;bad password&amp;#8217;
assert_nil session[:user]
assert_nil session[:user_id]
assert_response :success
end
&lt;p&gt;And further on down the same file:&lt;/p&gt;
def test_should_logout
login_as :quentin
get :logout
assert_nil session[:user]
assert_nil session[:user_id]
assert_response :redirect
end</body>
  <created-at type="datetime">2008-10-24T03:35:15-07:00</created-at>
  <id type="integer">71684</id>
  <permalink>storing-the-user-model-in-the-session</permalink>
  <repository-id type="integer">67186</repository-id>
  <title>Storing the User Model in the Session</title>
  <updated-at type="datetime">2008-10-24T03:35:15-07:00</updated-at>
  <user-id type="integer">30799</user-id>
</wiki>
