Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

session_countdown

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

session_countdown

  • 0.5.0
  • Rubygems
  • Socket score

Version published
Maintainers
1
Created
Source
RDoc Documentation

File: README.rdoc

Path:README.rdoc
Modified:Fri Aug 06 10:45:21 -0400 2010

session_countdown

A Ruby on Rails plugin that puts a countdown timer on the session object.

  session.countdown_start(1.hour)
  session.countdown_count #=> 3600
  session.countdown_running? # => true
  # 60 minutes pass
  session.countdown_count #=> 0
  session.countdown_running? # => false
  session.countdown_expired? # => true
  session.countdown_restart
  session.countdown_running? # => true
  session.countdown_abort
  session.countdown_running? # => false
  session.countdown_expired? # => false

But why?!?

Sometimes I need to build my own custom rails authentication systems rather than use plugins such as Authlogic, Devise or restful_authentication.

There is always a "timer" in my custom authentication contraptions, and there is always a session object lurking when I‘m dealing with authentication stuff, so why not combine the two?

API

Note that countdown_abort(), countdown_restart() and countdown_count() will throw a NoCountdown exception if called on a non-existent countdown timer.

Start a countdown timer

   session.countdown_start(seconds, name = :default)

You can have multiple countdown timers if you name them. The default countdown timer is named "default".

Check if a countdown timer exists and is currently running

   session.countdown_running?(name = :default)

Expire early (i.e. logout)

   session.countdown_abort(name = :default)

Restart, using the duration supplied to countdown_start

   session.countdown_restart(name = :default)

Check if expired

   session.countdown_expired?(name = :default)

Remaining time in seconds

   session.countdown_count(name = :default)

Understanding timer running, expired, and never started

  countdown_running? == true # timer running
  countdown_expired? == true # timer expired
  countdown_running? == false && countdown_expired? == false # never ran

Synopsis

In application_controller.rb

  before_filter :authorize

def authorize if session.countdown_running? session.countdown_restart # extend user's login else # store attempted access before rudely redirected to login screen session[:original_uri] = request.request_uri # rails3 use request.fullpath if session.countdown_expired? flash[:notice] = "Login Expired" else flash[:notice] = "Please login" end redirect_to :login end end

In any controller

  def login
    user = User.find_by_email(params[:email)
    if user && user.password_matches?(params[:password])
      session.countdown_start(1.hour)
      redirect_to :controller => :private
    else
      flash.now[:notice] = "Sorry, email/password wrong"
      render :index
    end

end

def logout session.countdown_abort flash[:notice] = "You are now logged out" redirect_to :index end

In user model

  def before_save
    if self.password_changed?
      self.salt = SecureRandom.hex(10)
      self.password = Digest::MD5.hexdigest(self.salt + self.password)
    end
  end

def password_matches?(password_to_match) self.password == Digest::MD5.hexdigest(self.salt + password_to_match) end

Note: Remember me

If you want an "remember me" feature you need to do two things.

Set timer for far future when user checks "remember me"

  session.countdown_start(1.year)

Tell rails to serve up a persistent cookie instead of session cookie, probably in application_controller.rb

  ActionController::Base.session_options[:expire_after] = 1.year

Persistent vs session cookies

There are two types of browser cookies: ones with expiration dates and ones without. When a cookie doesnt have an expiration date it‘s a session cookie and will be deleted when the browser quits. If the cookie has an expiration date it‘s a persistent cookie (a.k.a. domain cookie) and will be valid until that date.

"Remember me" could work fine with only session cookies, provided the user never quits the browser, but users expect "remember me" to never expire their login and to persist across browser quits. It also makes sense to set a far future expiration date or the cookie will eventually expire before the login does.

Classes

Files: 1 Classes: 0 Modules: 0 Methods: 0 Elapsed: 0.048s

FAQs

Package last updated on 06 Aug 2010

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc