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!