Skip to content

Instantly share code, notes, and snippets.

@kazu69
Created March 13, 2012 04:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kazu69/2026809 to your computer and use it in GitHub Desktop.
Save kazu69/2026809 to your computer and use it in GitHub Desktop.
sinatra oauth(authenticate) sample
#encoding: UTF-8
require 'rubygems'
require 'sinatra'
require 'erb'
require 'pp'
require 'twitter_oauth'
set :sessions, true
helpers do
include Rack::Utils
alias_method :h, :escape_html
end
configure do
use Rack::Session::Cookie, :secret => Digest::SHA1.hexdigest(rand.to_s)
KEY = "YOUR KEY"
SECRET = "YOUR SECRET"
end
before do
@twitter = TwitterOAuth::Client.new(
:consumer_key => KEY,
:consumer_secret => SECRET,
:token => session[:access_token],
:secret => session[:secret_token]
)
end
def base_url
default_port = (request.scheme == "http") ? 80 : 443
port = (request.port == default_port) ? "" : ":#{request.port.to_s}"
return "#{request.scheme}://#{request.host}#{port}"
end
get '/' do
if session[:login]
@screen_name = @twitter.info['screen_name']
@image_url = @twitter.info['profile_image_url_https']
erb :login, :layout => false
else
erb :notlogin, :layout => false
end
end
get '/login' do
callback_url = "#{base_url}/access_token"
request_token = @twitter.request_token(
:oauth_callback => callback_url
)
session[:request_token] = request_token.token
session[:request_token_secret] = request_token.secret
redirect request_token.authorize_url.gsub('authorize', 'authenticate')
end
get '/access_token' do
begin
@access_token = @twitter.authorize(
session[:request_token],
session[:request_token_secret],
:oauth_verifier => params[:oauth_verifier]
)
rescue OAuth::Unauthorized
end
if @twitter.authorized?
session[:access_token] = @access_token.token
session[:secret_token] = @access_token.secret
session[:login] = true
redirect '/'
else
erb :error, :layout => false
end
end
get '/logout' do
@twitter=nil
session.clear
redirect '/'
end
__END__
@@ login
<div><%= @screen_name %></div>
<div><img src="<%= @image_url %>" alt="" /></div>
@@ notlogin
<a href="/login">OAuth Login</a>
@@ error
<strong>error occured</strong>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment