Create a gist now

Instantly share code, notes, and snippets.

Embed
Twitter OAuth with node-oauth for node.js+express
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));
@jgendr2

This comment has been minimized.

Show comment
Hide comment
@jgendr2

jgendr2 Mar 3, 2012

Thanks for the update. Can you explain what process.env is? and where can you set these values? Thanks.

jgendr2 commented Mar 3, 2012

Thanks for the update. Can you explain what process.env is? and where can you set these values? Thanks.

@santosh79

This comment has been minimized.

Show comment
Hide comment
@santosh79

santosh79 Mar 3, 2012

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.

Owner

santosh79 commented Mar 3, 2012

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.

@jgendr2

This comment has been minimized.

Show comment
Hide comment
@jgendr2

jgendr2 Mar 3, 2012

Thanks for sharing.

jgendr2 commented Mar 3, 2012

Thanks for sharing.

@celestialcitizen

This comment has been minimized.

Show comment
Hide comment
@celestialcitizen

celestialcitizen Aug 21, 2012

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 ??

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 ??

@kyledetella

This comment has been minimized.

Show comment
Hide comment
@kyledetella

kyledetella Dec 30, 2012

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)

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)

@gabmontes

This comment has been minimized.

Show comment
Hide comment
@gabmontes

gabmontes Jan 4, 2013

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 for the example!

Is there any reason why URLs are twitter.com instead of api.twitter.com as documented on dev.twitter.com/?

@novalagung

This comment has been minimized.

Show comment
Hide comment
@novalagung

novalagung Feb 14, 2013

thanks, this run great

thanks, this run great

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment