Skip to content

Instantly share code, notes, and snippets.

@ylecuyer
Created November 22, 2017 22:33
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 ylecuyer/6d22038ea174e37b27225093d341c600 to your computer and use it in GitHub Desktop.
Save ylecuyer/6d22038ea174e37b27225093d341c600 to your computer and use it in GitHub Desktop.
OAuth Twitter
class Twitter::UsersController < ApplicationController
def authorize
request_token = twitter_consumer.get_request_token(:oauth_callback => oauth_callback)
save_twitter_request_token(request_token)
redirect_to request_token.authorize_url(:oauth_callback => oauth_callback)
end
def callback
request_token = load_twitter_request_token
access_token = request_token.get_access_token(oauth_verifier: params[:oauth_verifier])
user = User.find(params[:user_id])
if user.update(twitter_access_token: access_token.token, twitter_access_token_secret: access_token.secret)
flash[:notice] = 'Twitter account linked'
else
flash[:error] = 'Twitter accout couldnt be linked'
end
redirect_to user
end
def test
user = User.find(params[:user_id])
user.twitter.update("Test")
redirect_to user, notice: 'Tweet posted'
end
def unlink
user = User.find(params[:user_id])
if user.update(twitter_access_token: nil, twitter_access_token_secret: nil)
flash[:notice] = 'Twitter account unlinked'
else
flash[:error] = 'Twitter accout couldnt be unlinked'
end
redirect_to user
end
private
def oauth_callback
user_twitter_callback_url(params[:user_id])
end
def twitter_consumer
OAuth::Consumer.new(ENV['TWITTER_KEY'], ENV['TWITTER_SECRET'], { :site => "https://api.twitter.com", :scheme => :header })
end
def save_twitter_request_token(request_token)
session[:token] = request_token.token
session[:token_secret] = request_token.secret
end
def load_twitter_request_token
hash = { oauth_token: session[:token], oauth_token_secret: session[:token_secret]}
OAuth::RequestToken.from_hash(twitter_consumer, hash)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment