Sha256: 33c99362773c035ea045306ada56034e8f0f75ca0429cd0c9c751edd2cffd9aa

Contents?: true

Size: 1.82 KB

Versions: 4

Compression:

Stored size: 1.82 KB

Contents

module UserSystem
  
  protected
  
  # authenticate_user filter. add
  #
  #   before_filter :authenticate_user
  #
  def authenticate_user
    return true if authenticated_user?
    session[:return_to] = request.request_uri
    access_denied
    return false 
  end
  
  # overwrite if you want to have special behavior in case the user is not authorized
  # to access the current operation. 
  # the default action is to redirect to the login screen
  # example use :
  # a popup window might just close itself for instance
  def access_denied
    redirect_to :controller => "/user", :action => "login"
  end  
  
  def redirect_back_or_default(default)
    if session[:return_to].nil?
      redirect_to default
    else
      redirect_to_url session[:return_to]
      session[:return_to] = nil
    end
  end
  
  def authenticated_user?
    if session[:user_id]
      @current_user = User.find_by_id(session[:user_id])
      return false if @current_user.nil? 
      return true
    end
    
    if cookie = cookies[:autologin]
      cookie_value = case cookie
      when String:
        cookies[:autologin]
      when Hash:
        cookies[:autologin][:value].first
      else
        raise "Unknown cookie class: #{cookie.class}"
      end
      @current_user = User.authenticate(cookie_value, '')
      if @current_user
        session[:user_id] = @current_user.id
        return true
      end
    end
    
    # If not, is the user being authenticated by a token (created by signup/forgot password actions)?
    return false if not params['user']
    id = params['user']['id']
    key = params['key']
    if id and key
      @current_user = User.authenticate_by_token(id, key)
      session[:user_id] = @current_user ? @current_user.id : nil
      return true if not @current_user.nil?
    end
    
    # Everything failed
    return false
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
backlog-0.0.4 lib/user_system.rb
backlog-0.0.5 lib/user_system.rb
backlog-0.1.1 lib/user_system.rb
backlog-0.1.0 lib/user_system.rb