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').to(: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!