Skip to content

Instantly share code, notes, and snippets.

@bdryanovski
Created January 16, 2013 13:04
Show Gist options
  • Select an option

  • Save bdryanovski/4547000 to your computer and use it in GitHub Desktop.

Select an option

Save bdryanovski/4547000 to your computer and use it in GitHub Desktop.
Sinatra example for Twitter OAuth.
require 'rubygems'
require 'sinatra'
require 'oauth'
require 'json'
SERVER_HOST = '0.0.0.0'
SERVER_PORT = '3000'
BASE_URL = "http://0.0.0.0:3000"
TWITTER_KEY = ''
TWITTER_SECRET = ''
TWITTER_CALLBACK = "#{BASE_URL}/auth/twitter/callback"
GITHUB_KEY = ''
GITHUB_SECRET = ''
GITHUB_CALLBACK = "#{BASE_URL}/auth/github/callback"
# Sinatra settings
enable :sessions
set :bind, SERVER_HOST
set :port, SERVER_PORT
set :static, false
set :run, true
get '/' do
erb "<a href='/auth/twitter'>Loggin with Twitter</a><br/>
<a href='/auth/github'>Loggin with Github</a>"
end
# Twitter
get '/auth/twitter' do
oauth = OAuth::Consumer.new(
TWITTER_KEY,
TWITTER_SECRET,
:site => 'http://api.twitter.com',
:scheme => :header,
:http_method => :post,
:request_token_path => "/oauth/request_token",
:access_token_path => "/oauth/access_token",
:authorize_path => "/oauth/authorize"
)
request_token = oauth.get_request_token :oauth_callback => TWITTER_CALLBACK
session[:twitter_token] = request_token.token
session[:twitter_secret] = request_token.secret
redirect request_token.authorize_url
end
get '/auth/twitter/callback' do
oauth = OAuth::Consumer.new(
TWITTER_KEY,
TWITTER_SECRET,
:site => 'http://api.twitter.com',
:scheme => :header,
:http_method => :post,
:request_token_path => "/oauth/request_token",
:access_token_path => "/oauth/access_token",
:authorize_path => "/oauth/authorize"
)
request_token = OAuth::RequestToken.new(oauth, session[:twitter_token], session[:twitter_secret])
access_token = oauth.get_access_token(request_token, :oauth_verifier => params[:oauth_verifier])
oauth = OAuth::Consumer.new(TWITTER_KEY, TWITTER_SECRET, { :site => 'http://api.twitter.com'})
response = oauth.request(:get, '/1.1/account/verify_credentials.json', access_token, { :scheme => :query_string })
erb "#{JSON.parse(response.body)}"
end
# Github
get '/auth/github' do
# ...
end
get '/auth/github/callback' do
# ...
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment