Parent

Files

Merb::Authentication::Strategy

The Merb::Authentication::Strategy is where all the action happens in the merb-auth framework. Inherit from this class to setup your own strategy. The strategy will automatically be placed in the default_strategy_order array, and will be included in the strategy runs.

The strategy you implment should have a YourStrategy#run! method defined that returns

1. A user object if authenticated
2. nil if no authenticated user was found.

Example

class MyStrategy < Merb::Authentication::Strategy
  def run!
    u = User.get(params[:login])
    u if u.authentic?(params[:password])
  end
end

Attributes

body[W]
request[RW]
status[RW]

Provides a place to put the status of the response

Public Class Methods

abstract!() click to toggle source

Mark a strategy as abstract. This means that a strategy will not ever be run as part of the authentication. Instead this will be available to inherit from as a way to share code.

You could for example setup a strategy to check for a particular kind of login and then have a subclass for each class type of user in your system. i.e. Customer / Staff, Student / Staff etc

# File lib/merb-auth-core/strategy.rb, line 97
def abstract!
  @abstract = true
end
abstract?() click to toggle source

Asks is this strategy abstract. i.e. can it be run as part of the authentication

# File lib/merb-auth-core/strategy.rb, line 102
def abstract?
  !!@abstract
end
after(strategy) click to toggle source

Use this to declare the strategy should run after another strategy

# File lib/merb-auth-core/strategy.rb, line 83
def after(strategy)
  order = Merb::Authentication.default_strategy_order
  order.delete(self)
  index = order.index(strategy)
  index == order.size ? order << self : order.insert(index + 1, self)
end
before(strategy) click to toggle source

Use this to declare the strategy should run before another strategy

# File lib/merb-auth-core/strategy.rb, line 75
def before(strategy)
  order =  Merb::Authentication.default_strategy_order
  order.delete(self)
  index = order.index(strategy)
  order.insert(index,self)
end
inherited(klass) click to toggle source
# File lib/merb-auth-core/strategy.rb, line 69
def inherited(klass)
  Merb::Authentication.strategies << klass
  Merb::Authentication.default_strategy_order << klass
end
new(request, params) click to toggle source
# File lib/merb-auth-core/strategy.rb, line 108
def initialize(request, params)
  @request = request
  @params  = params
end

Public Instance Methods

body() click to toggle source

Allows you to provide a body of content to return when halting

# File lib/merb-auth-core/strategy.rb, line 173
def body
  @body || ""
end
cookies() click to toggle source

An alials to the request.cookies hash

# File lib/merb-auth-core/strategy.rb, line 121
def cookies
  request.cookies
end
halt!() click to toggle source

Mark this strategy as complete for this request. Will cause that no other strategies will be executed.

# File lib/merb-auth-core/strategy.rb, line 162
def halt!
  @halt = true
end
halted?() click to toggle source

Checks to see if this strategy has been halted

# File lib/merb-auth-core/strategy.rb, line 167
def halted?
  !!@halt
end
headers() click to toggle source

Provides a place to put headers

# File lib/merb-auth-core/strategy.rb, line 156
def headers
  @headers ||={}
end
params() click to toggle source

An alias to the request.params hash Only rely on this hash to find any router params you are looking for. If looking for paramteres use request.params

# File lib/merb-auth-core/strategy.rb, line 116
def params
  @params
end
redirect!(url, opts = {}) click to toggle source

Redirects causes the strategy to signal a redirect to the provided url.

Parameters

url<String>

The url to redirect to

options<Hash>

An options hash with the following keys:

+:permanent+ Set this to true to make the redirect permanent
+:status+ Set this to an integer for the status to return
# File lib/merb-auth-core/strategy.rb, line 138
def redirect!(url, opts = {})
  self.headers["Location"] = url
  self.status = opts[:permanent] ? 301 : 302
  self.status = opts[:status] if opts[:status]
  self.body   = opts[:message] || "<div>You are being redirected to <a href='#{url}'>#{url}</a></div>"
  halt!
  return true
end
redirected?() click to toggle source

Returns ture if the strategy redirected

# File lib/merb-auth-core/strategy.rb, line 148
def redirected?
  !!headers["Location"]
end
run!() click to toggle source

This is the method that is called as the test for authentication and is where you put your code.

You must overwrite this method in your strategy

@api overwritable

# File lib/merb-auth-core/strategy.rb, line 183
def run!
  raise NotImplemented
end
session() click to toggle source

An alias to the request.session hash

# File lib/merb-auth-core/strategy.rb, line 126
def session
  request.session
end
user_class() click to toggle source

Overwrite this method to scope a strategy to a particular user type you can use this with inheritance for example to try the same strategy on different user types

By default, Merb::Authentication.user_class is used. This method allows for particular strategies to deal with a different type of user class.

For example. If Merb::Authentication.user_class is Customer and you have a PasswordStrategy, you can subclass the PasswordStrategy and change this method to return Staff. Giving you a PasswordStrategy strategy for first Customer(s) and then Staff.

@api overwritable

# File lib/merb-auth-core/strategy.rb, line 200
def user_class
  Merb::Authentication.user_class
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.