module Padrino::Login

Padrino authentication module.

@example

class Nifty::Application < Padrino::Application
  # optional settings
  set :session_key, "visitor_id"       # visitor key name in session storage, defaults to "_login_#{app.app_name}")
  set :login_model, :visitor          # model name for visitor storage, defaults to :account, must be constantizable
  set :credentials_accessor, :visitor # the name of setter/getter method in helpers, defaults to :credentials
  enable :login_bypass                # enables or disables login bypass in development mode, defaults to disable
  set :login_url, '/sign/in'          # sets the utl to be redirected to if not logged in and in restricted area, defaults to '/login'
  disable :login_permissions          # sets initial login permissions, defaults to { set_access(:*, :allow => :*, :with => :login) }
  disable :login_controller           # disables default login controller to show an example of the custom one

  # required statement
  register Padrino::Login
  # example persistance storage
  enable :sessions
end

TODO: example controllers

Public Class Methods

included(base) click to toggle source
# File lib/padrino-auth/login.rb, line 38
def included(base)
  base.send(:include, InstanceMethods)
end
registered(app) click to toggle source
# File lib/padrino-auth/login.rb, line 28
def registered(app)
  warn 'Padrino::Login must be registered before Padrino::Access' if app.respond_to?(:set_access)
  included(app)
  setup_storage(app)
  setup_controller(app)
  app.before do
    log_in if authorization_required?
  end
end

Private Class Methods

setup_controller(app) click to toggle source
# File lib/padrino-auth/login.rb, line 53
def setup_controller(app)
  app.default(:login_url, '/login')
  app.default(:login_permissions) { set_access(:*, :allow => :*, :with => :login) }
  app.default(:login_controller, true)
  app.controller(:login) { include Controller } if app.login_controller
end
setup_storage(app) click to toggle source
# File lib/padrino-auth/login.rb, line 44
def setup_storage(app)
  app.default(:session_key, "_login_#{app.app_name}")
  app.default(:login_model, :account)
  app.default(:credentials_accessor, :credentials)
  app.send :attr_reader, app.credentials_accessor unless app.instance_methods.include?(app.credentials_accessor)
  app.send :attr_writer, app.credentials_accessor unless app.instance_methods.include?(:"#{app.credentials_accessor}=")
  app.default(:login_bypass, false)
end