Sha256: b02d092ed40e39b528ee01841f56266260038d3fc42255bc9f5631880bf23b5a

Contents?: true

Size: 1.69 KB

Versions: 4

Compression:

Stored size: 1.69 KB

Contents

class RememberMe < Merb::Authentication::Strategy
  def run!
    login_from_cookie
  end

  def current_user
    @current_user
  end
  
  def current_user=(new_user)
    @current_user = new_user
  end
  
  # Called from #current_user.  Finaly, attempt to login by an expiring token in the cookie.
  # for the paranoid: we _should_ be storing user_token = hash(cookie_token, request IP)
  def login_from_cookie
    current_user = cookies[:auth_token] && Merb::Authentication.user_class.first(:conditions => ["remember_token = ?", cookies[:auth_token]])
    if current_user && current_user.remember_token?
      handle_remember_cookie! false # freshen cookie token (keeping date)
      current_user
    end
  end
  
  #
  # Remember_me Tokens
  #
  # Cookies shouldn't be allowed to persist past their freshness date,
  # and they should be changed at each login

  # Cookies shouldn't be allowed to persist past their freshness date,
  # and they should be changed at each login

  def valid_remember_cookie?
    return nil unless current_user
    (current_user.remember_token?) && 
      (cookies[:auth_token] == current_user.remember_token)
  end
  
  # Refresh the cookie auth token if it exists, create it otherwise
  def handle_remember_cookie! new_cookie_flag
    return unless current_user
    case
    when valid_remember_cookie? then current_user.refresh_token # keeping same expiry date
    when new_cookie_flag        then current_user.remember_me 
    else                             current_user.forget_me
    end
    send_remember_cookie!
  end
  
  def send_remember_cookie!
    cookies.set_cookie(:auth_token, current_user.remember_token, :expires => current_user.remember_token_expires_at.to_time)
  end


end

Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
scottmotte-merb_auth_slice_multisite-0.8.4 lib/merb-auth-remember-me/strategies/remember_me.rb
scottmotte-merb_auth_slice_multisite-0.8.5 lib/merb-auth-remember-me/strategies/remember_me.rb
scottmotte-merb_auth_slice_multisite-0.8.6 lib/merb-auth-remember-me/strategies/remember_me.rb
merb_auth_slice_multisite-0.8.6 lib/merb-auth-remember-me/strategies/remember_me.rb