I am using node-twitter-api module in node.js. In OAuth Call back session is getting lost.
`router.get('/p/twitterLogin', handlers.twitterLogin);
router.get('/p/twitter_auth', handlers.twitterAuth);
exports.twitterLogin = utils.wrapReqHandler(function*(req, res){
let twitter = new twitterAPI({
consumerKey: <appId>,
consumerSecret: <Secrect Key>,
callback: <callback url>
});
let twitterRequestTokenDetails = yield new Promise(function (resolve, reject) {
twitter.getRequestToken(function (error, requestToken, requestTokenSecret, results) {
if (error) {
console.log( 'Twitter : Error getting OAuth request token :' + error);
resolve()
} else {
resolve({ 'token': requestToken, 'secret': requestTokenSecret, 'results': results });
}
});
});
if (twitterRequestTokenDetails) {
req.session.twReqToken = twitterRequestTokenDetails.token;
req.session.twReqTokenSecret = twitterRequestTokenDetails.secret;
req.session.dest_url = req.query.dest_url;
let url = 'https://twitter.com/oauth/authenticate?oauth_token=' + twitterRequestTokenDetails.token;
res.redirect(302, url);
res.end();
}else{
console.log( "twitterLogin : Could not find social auth module details in session.");
}
});`
After authentication i am doing OAuth call. In the call back i am seeing the session is different due to that session values are getting lost.
exports.twitterAuth = utils.wrapReqHandler(function* (req, res) {
logger.debug("Twitter twitterAuth :::: " + JSON.stringify(req.session));
if (req.session.twReqToken && req.session.twReqTokenSecret) {
let twitter = new twitterAPI({
consumerKey: req.session.socialAuthModule.twitter.appId,
consumerSecret: req.session.socialAuthModule.twitter.appSecret,
callback: utils.resolveURL(req, TWITTER_CALLBACK_URL)
});
let twitterTokenDetails = yield new Promise(function (resolve, reject) {
twitter.getAccessToken(req.session.twReqToken, req.session.twReqTokenSecret, req.query.oauth_verifier, function (error, accessToken, accessTokenSecret, results) {
if (error) {
console.log('Twitter : Failure : twitterAuthenticated :' + error);
resolve();
} else {
resolve({ 'token': accessToken, 'secret': accessTokenSecret });
}
});
});
let twitterUserData = yield new Promise(function (resolve, reject) {
twitter.verifyCredentials(twitterTokenDetails.token, twitterTokenDetails.secret, function (error, data, response) {
if (error) {
console.log("Twitter :: something was wrong with either accessToken or accessTokenSecret ");
resolve();
} else {
resolve(data);
}
});
});
}else{
console.log( "twitterAuth : Could not find details in session.");
}
});
Let me know how to solve this issue.
