-
-
Save santosh79/1964797 to your computer and use it in GitHub Desktop.
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)); |
Sure - process.env returns all the environment variables in your system. For the sake of this example, I kept it simple and secure by requiring the access token and secret be passed in as environment variables. In order to run this you would do:
TWITTER_CONSUMER_KEY="yourAppKey" TWITTER_CONSUMER_SECRET="yourAppSecret" node twitter-oauth.js
In the command line.
Thanks for sharing.
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
Thanks for the update. Can you explain what process.env is? and where can you set these values? Thanks.