My favorites | Sign in
Project Home Wiki Issues Source
Search
for
OAuth2  
Updated Feb 10, 2012 by bobaman.goog@gmail.com

Overview

OAuth 2.0 is an emerging standard for accessing protected resources on the web. Google APIs and the google-api-ruby-client library support OAuth 2.0.

Further Reading

Sample

Here is a simple example using the ruby client and OAuth 2.0 to access the buzz apis.

The full source code of this sample can be found here.

require 'rubygems'
require 'sinatra'
require 'datamapper'
require 'google/api_client'

use Rack::Session::Pool, :expire_after => 86400 # 1 day

# Set up our token store
DataMapper.setup(:default, 'sqlite::memory:')
class TokenPair
  include DataMapper::Resource

  property :id, Serial
  property :refresh_token, String
  property :access_token, String
  property :expires_in, Integer
  property :issued_at, Integer

  def update_token!(object)
    self.refresh_token = object.refresh_token
    self.access_token = object.access_token
    self.expires_in = object.expires_in
    self.issued_at = object.issued_at
  end

  def to_hash
    return {
      :refresh_token => refresh_token,
      :access_token => access_token,
      :expires_in => expires_in,
      :issued_at => Time.at(issued_at)
    }
  end
end
TokenPair.auto_migrate!

before do
  @client = Google::APIClient.new
  @client.authorization.client_id = '245083617981.apps.googleusercontent.com'
  @client.authorization.client_secret = 'pYelZCRjSa+iMezYENVScXFk'
  @client.authorization.scope = 'https://www.googleapis.com/auth/buzz'
  @client.authorization.redirect_uri = to('/oauth2callback')
  @client.authorization.code = params[:code] if params[:code]
  if session[:token_id]
    # Load the access token here if it's available
    token_pair = TokenPair.get(session[:token_id])
    @client.authorization.update_token!(token_pair.to_hash)
  end
  if @client.authorization.refresh_token && @client.authorization.expired?
    @client.authorization.fetch_access_token!
  end
  @buzz = @client.discovered_api('buzz')
  unless @client.authorization.access_token || request.path_info =~ /^\/oauth2/
    redirect to('/oauth2authorize')
  end
end

get '/oauth2authorize' do
  redirect @client.authorization.authorization_uri.to_s, 303
end

get '/oauth2callback' do
  @client.authorization.fetch_access_token!
  # Persist the token here
  token_pair = if session[:token_id]
    TokenPair.get(session[:token_id])
  else
    TokenPair.new
  end
  token_pair.update_token!(@client.authorization)
  token_pair.save()
  session[:token_id] = token_pair.id
  redirect to('/')
end

get '/' do
  result = @client.execute(
    @buzz.activities.list,
    {'userId' => '@me', 'scope' => '@consumption', 'alt'=> 'json'}
  )
  status, _, _ = result.response
  [status, {'Content-Type' => 'application/json'}, JSON.generate(result.data)]
end
Comment by ja...@vautin.com, Jan 13, 2012

404 on the "full source code' link.

Comment by trima...@gmail.com, Feb 6, 2012

the same 404 here...

Comment by project member bobaman.goog@gmail.com, Feb 10, 2012

Fixed.

Comment by vell...@gmail.com, Feb 25, 2012

wiki Syntax


Sign in to add a comment
Powered by Google Project Hosting