Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

An OpenID Consumer plugin for Merb

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 lib
Octocat-spinner-32 spec
Octocat-spinner-32 LICENSE
Octocat-spinner-32 README
Octocat-spinner-32 Rakefile
Octocat-spinner-32 merb_openid.gemspec
README
merb_openid
===========

A plugin for Merb that wraps the ruby-openid gem (2.x) and provides an easy interface for consuming OpenIDs
in a very similar way to the open_id_authentication plugin for Rails.

Installation
============

Easy:

   gem install merb_openid
   
Then in your application's init.rb:

   dependency 'merb_openid'
   
The plugin uses the pretty limited memory store by default but you can add a new store using Merb::Config:

   Merb::Config[:merb_openid][:store] = OpenID::Store::Memory.new
   
You'll probably want to use a database store on production apps.  I'll start adding adapters based on the
various ORMs soon.

Usage
=====

In your routes you need to make sure that the url you consume OpenIDs from can accept get requests, so:

   r.match('openid').(:controller => 'session', :action => 'openid')
   
Then in your controller:

  class Session < Merb::Controller
  
    def openid
      if openid_request? # has the user provided a url (openid_url)
        openid_authenticate do |result, identity_url|
          if result == :success
            user = User.find_by_openid_url(identity_url)
          end
        end
      end
    end
    
  end
  
SReg
====

Getting SReg data is easy too:

  class Session < Merb::Controller
  
    def openid
      if openid_request? # has the user provided a url (openid_url)
        openid_authenticate(:fields => [:fullname, :email]) do |result, identity_url, sreg|
          if result == :success
            user = User.find_by_openid_url(identity_url)
            user.name = sreg[:fullname]
          end
        end
      end
    end
    
  end
  
More to come!
Something went wrong with that request. Please try again.