Sha256: 9f4921a3a2f72979c4c8599ef28199124051f22c7b769d30b67fb289ef3fdf8d

Contents?: true

Size: 1.6 KB

Versions: 1

Compression:

Stored size: 1.6 KB

Contents

require 'action_controller'

# :nodoc: namespace
module AuthpwnRails

# :nodoc: namespace
module Session

# Mixed into ActiveController::Base
module ControllerMixin
  def self.included(base)
    base.send :extend, ControllerClassMethods
  end
end

# Methods here become ActiveController::Base class methods.
module ControllerClassMethods  
  # Keeps track of the currently authenticated user via the session. 
  #
  # Assumes the existence of a User model. A bare ActiveModel model will do the
  # trick. Model instances must implement id, and the model class must implement
  # find_by_id.
  def authenticates_using_session(options = {})
    include ControllerInstanceMethods
    before_filter :authenticate_using_session, options   
  end
end

# Included in controllers that call authenticates_using_session.
module ControllerInstanceMethods
  attr_reader :current_user
  
  def current_user=(user)
    @current_user = user
    if user
      session[:current_user_id] = user.id
    else
      session.delete :current_user_id
    end
  end  

  def authenticate_using_session
    return true if current_user
    user_id = session[:current_user_id]
    user = user_id && User.find_by_id(user_id)
    self.current_user = user if user
  end
  private :authenticate_using_session  
end

ActionController::Base.send :include, ControllerMixin

# :nodoc: add session modification
class ActionController::TestCase
  # Sets the authenticated user in the test session.
  def set_session_current_user(user)
    request.session[:current_user_id] = user ? user.id : nil
  end
end

end  # namespace AuthpwnRails::Session

end  # namespace AuthpwnRails

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
authpwn_rails-0.3.0 lib/authpwn_rails/session.rb