Managing oauth flow can be a pain and involve a lot of messy code. Flutter helps with that.
var express = require('express');
var Flutter = require('flutter');
var flutter = new Flutter({
consumerKey: 'MY CONSUMER KEY',
consumerSecret: 'MY CONSUMER SECRET',
loginCallback: 'http://my-host/twitter/callback',
authCallback: function(req, res, next) {
if (req.error) {
// Authentication failed, req.error contains details
return;
}
var accessToken = req.session.oauthAccessToken;
var secret = req.session.oauthAccessTokenSecret;
// Store away oauth credentials here
// Redirect user back to your app
res.redirect('/back/to/app');
}
});
var app = express();
app.get('/twitter/connect', flutter.connect);
// URL used in loginCallback above
app.get('/twitter/callback', flutter.auth);
// Direct users to /twitter/connect to initiate oauth flow.
Currently only GET
functions are supported
// var {accessToken, secret} = retrieve credentials for request
flutter.API.fetch('search/tweets.json', { q: 'bacon' }, accessToken, secret, function(err, results) {
console.log(results); // { statuses: [ { ...etc } ] }
});
var flutter = new Flutter({
// Pass this to log messages inside Flutter
debug: function(msg){ ... },
// Twitter API app credentials
consumerKey: 'foo',
consumerSecret: 'bar',
// Twitter API login callback
loginCallback: 'http://foo.com/authCallback',
// the URL to redirect to after authorisation is complete and we have tokens
// will not be used if authCallback is overridden
completeCallback: 'http://foo.com/completeCallback',
// called immediately before the user is redirected to Twitter's authorize
// screen, used this to stash parameters etc on the request session
connectCallback: function(req, res, next){},
// Called on successful auth.
// req.session contains auth parameters (see above)
// if not defined, Flutter will redirect to completeCallback specified above
authCallback: function(req, res, next){},
// Cache lifetime to use for API requests. Set to something falsy to disable cache
cache: 60000,
// Redis config. Used for caching api responses.
// `options` is passed to redis.createClient (https://github.com/NodeRedis/node_redis#rediscreateclient)
redis: { host: 'localhost', port: 6379, database: 0, options: {} },
// set this to a redis client to use instead of creating a new one
cacheClient: redisClient,
// Key prefix used on all cache keys in redis
prefix: 'flutter:'
});