Sample Code, quick simple openid auth

Bluebie, Jenna blueberry at creativepony.com
Sun May 18 23:51:12 EDT 2008


You'll need to install the 'openid' gem for this, and require it in  
your camping app:

     class Login < R '/login'
       def get
         this_url = 'http:' + URL('/login').to_s
         unless input.finish.to_s == '1'
           # start doing the auth here
           begin
             oid_request = OpenID::Consumer.new(@state,  
nil).begin(input.openid_identity)
             oid_request.return_to_args['finish'] = '1'
             redirect(oid_request.redirect_url('http:' +  
URL('/').to_s, this_url))
           rescue OpenID::DiscoveryFailure
             return 'Couldn\'t find an OpenID at that address, are you  
sure it is one?'
           end
         else
           # finish the auth here
           response = OpenID::Consumer.new(@state,  
nil).complete(input, this_url)
           case response.status
           when OpenID::Consumer::SUCCESS
             @state.identity = response.identity_url.to_s
             return redirect(R(HomeScreen))
           when OpenID::Consumer::FAILURE
             'The OpenID thing doesn\'t think you really are that  
person, they said: ' + response.message
           end
         end
       end
     end

Then just point a form at /login with an input by the name of  
openid_identifier, and you have yourself some auth! It will set  
@state.identity to their OpenID URL. Using this you can auth people  
with existing aol, lifejournal, yahoo accounts, and a lot of littler  
openid provider's too. It could sure use some upgrades in the error  
reporting department, which you could hook up to your own error pages  
or whatever. I'll be using this in an app which doesn't use any  
relational databases, just file system storage. You'll probably want  
to change the 'return redirect(R(HomeScreen))' line near the end to  
some page in your app that logged in user's go to before you take this  
online too. :)

Public Domain.


–
Jenna
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/camping-list/attachments/20080519/79792dc8/attachment.html>


More information about the Camping-list mailing list