README.md in oauthenticator-0.1.2 vs README.md in oauthenticator-0.1.3

- old
+ new

@@ -9,21 +9,21 @@ to flexibly accomodate the general case of OAuth authentication, OAuthenticator leaves certain parts of the implementation up to the user. The user configures this by creating a module implementing what is needed, which will be passed to OAuthenticator. For more information on the details of the methods which must or may be implemented, please see the -documentation for the module OAuthenticator::SignedRequest::ConfigMethods, which defines stub methods for +documentation for the module `OAuthenticator::ConfigMethods`, which defines stub methods for each recognized method, with method documentation relating to your implementation. A simple, contrived example follows, which approximately resembles what you might implement. It is not useful on its own but will be used in following examples for usage of Middleware and SignedRequest. ```ruby require 'oauthenticator' -# we'll suppose that there exist the following ActiveRecord classes with the named attributes (all of which -# are strings), for this example: +# we'll suppose that there exist the following ActiveRecord classes with the named +# attributes (all of which are strings), for this example: # # - OAuthNonce: # - nonce # - timestamp # - OAuthConsumer @@ -38,16 +38,18 @@ # check for an existing nonce, coupled with the timestamp def nonce_used? OAuthNonce.where(:nonce => nonce, :timestamp => timestamp).any? end - # nonce is used, store it so that in the future #nonce_used? will return true correctly + # nonce is used, store it so that in the future #nonce_used? will return true + # correctly def use_nonce! OAuthNonce.create!(:nonce => nonce, :timestamp => timestamp) end - # number seconds in the past and the future for which we'll consider a request authentic + # number seconds in the past and the future for which we'll consider a request + # authentic def timestamp_valid_period 25 end # no plaintext for us! @@ -60,47 +62,60 @@ OAuthConsumer.where(:key => consumer_key).first.try(:secret) end # access token secret, looked up by access token def access_token_secret - AccessToken.where(:token => token).first.try(:secret) + OAuthAccessToken.where(:token => token).first.try(:secret) end # whether the access token belongs to the consumer def access_token_belongs_to_consumer? - AccessToken.where(:token => token).first.try(:consumer_key) == consumer_key - # alternately, AccessToken.where(:token => token, :consumer_key => consumer_key).any? + OAuthAccessToken.where(:token => token).first.try(:consumer_key) == consumer_key + # alternately: + # OAuthAccessToken.where(:token => token, :consumer_key => consumer_key).any? end end ``` You may also find it enlightening to peruse `test/oauthenticator_test.rb`. About the first thing it does is set up some very simple storage in memory, and define a module of config methods which are used through the tests. ## OAuthenticator::Middleware -The middleware is used by passing the above-mentioned module on the :config_methods key to initialize the +The middleware is used by passing the above-mentioned module on the `:config_methods` key to initialize the middleware: ```ruby # config.ru use OAuthenticator::Middleware, :config_methods => AwesomeOAuthConfig run proc { |env| [200, {'Content-Type' => 'text/plain'}, ['access granted!']] } ``` -The authentication can also be bypassed with a proc on the :bypass key; see the documentation for -OAuthenticator::Middleware for the details of that. +The authentication can also be bypassed with a proc on the `:bypass` key; see the documentation for +`OAuthenticator::Middleware` for the details of that. ## OAuthenticator::SignedRequest The OAuthenticator::SignedRequest class may be used independently of the middleware, though it must also be passed your module of config methods to include. It is used like: ```ruby -OAuthenticator::SignedRequest.including_config(AwesomeOAuthConfig).new(request_attributes) +OAuthenticator::SignedRequest.including_config(AwesomeOAuthConfig).new(request_attrs) ``` See the documentation of OAuthenticator::SignedRequest for how the class is used, once it includes the methods it needs to function. +# Other + +## SimpleOAuth + +OAuthenticator uses [SimpleOAuth](https://github.com/laserlemon/simple_oauth) underneath. There is a +fork with some improvements that have not yet made it into the main SimpleOAuth repo, and it is recommended +to use these for more robust and safe parsing of the Authorization header. This is not published in rubygems, +but if you use Bundler, you can use this by using the following line in your `Gemfile`; + +```ruby +gem 'simple_oauth', :git => 'https://github.com/notEthan/simple_oauth.git', :tag => 'ethan-v0.2.0.1' +```