Skip to content

Instantly share code, notes, and snippets.

@matteoagosti
Created June 3, 2012 15:12
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save matteoagosti/2863869 to your computer and use it in GitHub Desktop.
Save matteoagosti/2863869 to your computer and use it in GitHub Desktop.
Twitter OAUTH using Meteorjs
var ClientRouter = Backbone.Router.extend({
routes: {
'404': 'notfound',
'500': 'error',
'auth': 'auth',
'authCallback?oauth_token=:oauth_token&oauth_verifier=:oauth_verifier': 'authCallback',
'': 'defaultRoute'
},
defaultRoute: function() {
Session.set('route', Const.homeRoute);
},
notfound: function(path) {
Session.set('route', Const.notfoundRoute);
},
error: function() {
Session.set('route', Const.errorRoute);
},
auth: function() {
Session.set('route', Const.authRoute);
Meteor.call('auth', function (err, res) {
if(err) {
Router.navigate('500');
//console.log(err);
return false;
}
if(res.error) {
Router.navigate('500');
//console.log(res.error);
return false;
}
document.location.href ='https://api.twitter.com/oauth/authenticate?oauth_token=' + res.oauth_token;
});
},
authCallback: function(oauth_token, oauth_verifier) {
if(!oauth_token || !oauth_verifier) {
Router.navigate('500', true);
return false;
}
Meteor.call('authCallback', oauth_token, oauth_verifier, function (err, res) {
if(err) {
Router.navigate('500');
//console.log(err);
return false;
}
if(res.error) {
Router.navigate('auth');
//console.log(res.error);
return false;
}
Router.navigate('', true);
});
}
});
Router = new ClientRouter;
var require = __meteor_bootstrap__.require;
var OAuth= require('oauth').OAuth;
var oauth = new OAuth(
'https://api.twitter.com/oauth/request_token',
'https://api.twitter.com/oauth/access_token',
'yourToken',
'yourTokenSecret',
'1.0',
'http://localhost:3000/authCallback',
'HMAC-SHA1'
);
Meteor.methods({
auth: function() {
this.unblock();
var fut = new Future;
callback = function(error, oauth_token, oauth_token_secret, results) {
fut.ret({
error: error,
oauth_token: oauth_token,
oauth_token_secret: oauth_token_secret,
results: results
});
};
callback = _.once(callback);
oauth.getOAuthRequestToken(function(error, oauth_token, oauth_token_secret, results) {
callback(error, oauth_token, oauth_token_secret, results)
});
if(fut) {
return fut.wait();
}
},
authCallback: function(oauth_token, oauth_verifier) {
this.unblock();
var fut = new Future;
callback = function(error, oauth_access_token, oauth_access_token_secret, results) {
fut.ret({
error: error,
oauth_access_token: oauth_access_token,
oauth_access_token_secret: oauth_access_token_secret,
results: results
});
};
callback = _.once(callback);
oauth.getOAuthAccessToken(
oauth_token,
null,
oauth_verifier,
function(error, oauth_access_token, oauth_access_token_secret, results) {
callback(error, oauth_access_token, oauth_access_token_secret, results);
}
);
if(fut) {
return fut.wait();
}
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment