Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
A simple example of PIN-based oauth flow with Twitter and jsOAuth
<!DOCTYPE html>
<html>
<head>
<!--
A simple example of PIN-based oauth flow with Twitter and jsOAuth.
This is mostly based on/copied from <http://log.coffeesounds.com/oauth-and-pin-based-authorization-in-javascri>.
Get jsOAuth at <https://github.com/bytespider/jsOAuth/downloads>
-->
<meta charset="utf-8">
<title>jsOauth test</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script type="text/javascript" src="jsOAuth-1.1.js"></script>
<style type="text/css" media="screen">
</style>
<script>
$(document).ready(function() {
var options = {
consumerKey: 'YOUR_CONSUMER_KEY',
consumerSecret: 'YOUR_CONSUMER_SECRET'
};
var requestParams;
var accessParams;
var oauth = OAuth(options);
oauth.get('https://twitter.com/oauth/request_token',
function(data) {
console.dir(data);
window.open('https://twitter.com/oauth/authorize?'+data.text);
requestParams = data.text
},
function(data) { alert('darn'); console.dir(data) }
);
$('#pinbutton').click(function() {
if ($('#pin').val()) {
oauth.get('https://twitter.com/oauth/access_token?oauth_verifier='+$('#pin').val()+'&'+requestParams,
function(data) {
console.dir(data);
// split the query string as needed
var accessParams = {};
var qvars_tmp = data.text.split('&');
for (var i = 0; i < qvars_tmp.length; i++) {;
var y = qvars_tmp[i].split('=');
accessParams[y[0]] = decodeURIComponent(y[1]);
};
oauth.setAccessToken([accessParams.oauth_token, accessParams.oauth_token_secret]);
getHomeTimeline();
},
function(data) { alert('poop'); console.dir(data); }
);
}
});
function getHomeTimeline() {
oauth.get('https://api.twitter.com/1/statuses/home_timeline.json',
function(data) {
entries = JSON.parse(data.text);
var html = [];
for (var i = 0; i < entries.length; i++) {
html.push(JSON.stringify(entries[i]));
};
$('#timeline').html(html.join('<hr>'));
},
function(data) { alert('lame'); console.dir(data); }
);
}
});
</script>
</head>
<body>
<h1>jsOauth test</h1>
When you get a PIN, enter it here.
<input id="pin" type="text" value=""><button id='pinbutton'>Save</button>
<div id="timeline">
</div>
</body>
</html>
@rxgx

This comment has been minimized.

Copy link

commented May 20, 2011

This won't work with a normal AJAX call (because of Access-Control-Allow-Origin) and requires JSONP.

@funkatron

This comment has been minimized.

Copy link
Owner Author

commented May 20, 2011

Yes, this will only work in platforms not bound by same-origin, such as Titanium Desktop, Adobe AIR and webOS.

@Ridermansb

This comment has been minimized.

Copy link

commented Jan 2, 2012

How would the implementation using JSONP?

@funkatron

This comment has been minimized.

Copy link
Owner Author

commented Jan 3, 2012

pretty sure Twitter oAuth does not support JSONP responses. YMMV.

@Ridermansb

This comment has been minimized.

Copy link

commented Jan 3, 2012

Some examples using no-PIN mode ?

I read this article but it seemed very confusing.

@funkatron

This comment has been minimized.

Copy link
Owner Author

commented Jan 3, 2012

Sorry, I'd have to suggest looking at the Twitter docs – I don't have time to write up more examples for you.

@Ridermansb

This comment has been minimized.

Copy link

commented Jan 3, 2012

No problem, I search the Twitter docs.
Anyway, thanks for the help.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.