Skip to content

Instantly share code, notes, and snippets.

@jeffrafter
Created August 28, 2010 21:37
Show Gist options
  • Save jeffrafter/555607 to your computer and use it in GitHub Desktop.
Save jeffrafter/555607 to your computer and use it in GitHub Desktop.
Twitter OAuth with node-oauth for node.js+express
var express = require('express');
var sys = require('sys');
var oauth = require('oauth');
var app = express.createServer();
var _twitterConsumerKey = "YOURTWITTERCONSUMERKEY";
var _twitterConsumerSecret = "YOURTWITTERCONSUMERSECRET";
function consumer() {
return new oauth.OAuth(
"https://twitter.com/oauth/request_token", "https://twitter.com/oauth/access_token",
_twitterConsumerKey, _twitterConsumerSecret, "1.0A", "http://badgestar.com/sessions/callback", "HMAC-SHA1");
}
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
app.use(express.logger());
app.use(express.cookieDecoder());
app.use(express.session());
});
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 {
req.session.twitterScreenName = data["screen_name"];
res.send('You are signed in: ' + req.session.twitterScreenName)
}
});
}
});
});
app.listen(parseInt(process.env.PORT || 80));
@bingeboy
Copy link

use this in config to replace dynamic helper:

app.use(function(req, res){
res.locals = req.session;
});

See this post on stackoverflow:
http://stackoverflow.com/questions/13517375/nodejs-express-dynamichelpers-error

@max90727
Copy link

My problem is I can not get req.query.oauth_verifier

@max90727
Copy link

Problem solved thanks

@jinjojohnson
Copy link

super one , Thanks

@mccahill
Copy link

I have a version of this gist that works with Express 3 and shows both twitter (OAuth) and Google (OAuth2) here: https://gist.github.com/mccahill/6378276

@aslamanver
Copy link

aslamanver commented May 4, 2020

Brilliant man, Thank you ❤️

@mort3za
Copy link

mort3za commented Jul 3, 2021

I had to change the last url to see the result: https://api.twitter.com/1.1/account/verify_credentials.json

@nashwik
Copy link

nashwik commented Dec 2, 2021

TypeError: Cannot set properties of undefined (setting 'oauthRequestToken')

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