Created
March 3, 2012 07:04
-
-
Save santosh79/1964797 to your computer and use it in GitHub Desktop.
Twitter OAuth with node-oauth for node.js+express
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var express = require('express'); | |
var sys = require('util'); | |
var oauth = require('oauth'); | |
var app = express.createServer(); | |
var _twitterConsumerKey = process.env['TWITTER_CONSUMER_KEY']; | |
var _twitterConsumerSecret = process.env['TWITTER_CONSUMER_SECRET']; | |
console.log("_twitterConsumerKey: %s and _twitterConsumerSecret %s", process.env['TWITTER_CONSUMER_KEY'], process.env['TWITTER_CONSUMER_SECRET']); | |
function consumer() { | |
return new oauth.OAuth( | |
"https://twitter.com/oauth/request_token", "https://twitter.com/oauth/access_token", | |
_twitterConsumerKey, _twitterConsumerSecret, "1.0A", "http://your.domain/sessions/callback", "HMAC-SHA1"); | |
} | |
app.configure('development', function(){ | |
app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); | |
app.use(express.logger()); | |
app.use(express.cookieParser()); | |
app.use(express.session({ | |
secret: "secretkey" | |
})); | |
}); | |
app.dynamicHelpers({ | |
session: function(req, res){ | |
return req.session; | |
} | |
}); | |
app.get('/', function(req, res){ | |
res.send('Hello World'); | |
}); | |
app.get('/sessions/connect', function(req, res){ | |
consumer().getOAuthRequestToken(function(error, oauthToken, oauthTokenSecret, results){ | |
if (error) { | |
res.send("Error getting OAuth request token : " + sys.inspect(error), 500); | |
} else { | |
req.session.oauthRequestToken = oauthToken; | |
req.session.oauthRequestTokenSecret = oauthTokenSecret; | |
res.redirect("https://twitter.com/oauth/authorize?oauth_token="+req.session.oauthRequestToken); | |
} | |
}); | |
}); | |
app.get('/sessions/callback', function(req, res){ | |
sys.puts(">>"+req.session.oauthRequestToken); | |
sys.puts(">>"+req.session.oauthRequestTokenSecret); | |
sys.puts(">>"+req.query.oauth_verifier); | |
consumer().getOAuthAccessToken(req.session.oauthRequestToken, req.session.oauthRequestTokenSecret, req.query.oauth_verifier, function(error, oauthAccessToken, oauthAccessTokenSecret, results) { | |
if (error) { | |
res.send("Error getting OAuth access token : " + sys.inspect(error) + "["+oauthAccessToken+"]"+ "["+oauthAccessTokenSecret+"]"+ "["+sys.inspect(results)+"]", 500); | |
} else { | |
req.session.oauthAccessToken = oauthAccessToken; | |
req.session.oauthAccessTokenSecret = oauthAccessTokenSecret; | |
// Right here is where we would write out some nice user stuff | |
consumer().get("http://twitter.com/account/verify_credentials.json", req.session.oauthAccessToken, req.session.oauthAccessTokenSecret, function (error, data, response) { | |
if (error) { | |
res.send("Error getting twitter screen name : " + sys.inspect(error), 500); | |
} else { | |
console.log("data is %j", data); | |
data = JSON.parse(data); | |
req.session.twitterScreenName = data["screen_name"]; | |
res.send('You are signed in: ' + req.session.twitterScreenName) | |
} | |
}); | |
} | |
}); | |
}); | |
app.listen(parseInt(process.env.PORT || 80)); |
I get the following error
[Error: 2712:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:openssl\ssl\s23_clnt.c:607:
]
Any ideas as to how to rectify the same ??
Everything seems to work. However, I did have to change the endpoint for the credentials to : https://api.twitter.com/1.1/account/verify_credentials.json . (via: https://dev.twitter.com/docs/api/1.1/get/account/verify_credentials)
Thanks for the example!
Is there any reason why URLs are twitter.com instead of api.twitter.com as documented on dev.twitter.com/?
thanks, this run great
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks for sharing.