我有一個Phonegap應用程序,它使用ChildBrowser授權我的應用程序使用Oauth與用戶Twitter帳戶連接。一旦用戶登錄他們的Twitter帳戶授權應用程序連接,Twitter將ChildBrowser發送到回調網址,在那裏我從url中檢索request_token。但後來我嘗試調用API來爲access_token交換request_token,並且應用程序不會繼續超過這一點。它看起來應用程序中斷API調用獲取access_token,但我不知道如何。使用jsOAuth從Twitter Oauth API檢索access_token
任何幫助將不勝感激!
非常感謝你們!
這裏是我的javascript:
/* -- Twitter START -- */
var Twitter = {
init:function() {
var oauth;
var requestParams;
var options = {
consumerKey: 'blahblah',
consumerSecret: 'blahblah',
callbackUrl: "http://beaconize.com/"
};
alert(localStorage.twitterKey);
var cb = ChildBrowser.install(); // install our ChildBrowser (cb)
var twitterKey = "twttrKey"; // what we will store our twitter user information in
// our storedAccessData and Raw Data
var storedAccessData, rawData = localStorage.getItem(twitterKey);
// First thing we need to do is check to see if we already have the user saved!
if(localStorage.getItem(twitterKey) !== null){
// If we already have them
storedAccessData = JSON.parse(rawData); // Parse our JSON object
options.accessTokenKey = storedAccessData.accessTokenKey; // This is saved when they first sign in
options.accessTokenSecret = storedAccessData.accessTokenSecret; // this is saved when they first sign in
oauth = OAuth(options);
oauth.get('https://api.twitter.com/1/account/verify_credentials.json?skip_status=true',
function(data) {
var entry = JSON.parse(data.text);
alert("USERNAME: " + entry.screen_name);
}
);
} else {
// We don't have a user saved yet
oauth = OAuth(options);
oauth.get('https://api.twitter.com/oauth/request_token',
function(data) {
requestParams = data.text;
cb.showWebPage('https://api.twitter.com/oauth/authorize?'+data.text); // This opens the Twitter authorization/sign in page
cb.onLocationChange = function(loc){ Twitter.success(loc); }; // When the ChildBrowser URL changes we need to track that
},
function(data) {
alert("ERROR: "+data);
}
);
}
},
/*
When The ChildBrowser URL changes we will track it here.
We will also determine if the request was a success or not here
*/
success:function(loc) {
// The supplied oauth_callback_url for this session is being loaded
/*
We will check to see if the childBrowser's new URL matches our callBackURL
*/
if (loc.indexOf("http://beaconize.com/?") >= 0) {
// Parse the returned URL
var index, verifier = '';
var params = loc.substr(loc.indexOf('?') + 1);
params = params.split('&');
for (var i = 0; i < params.length; i++) {
var y = params[i].split('=');
if(y[0] === 'oauth_verifier') {
verifier = y[1];
}
}
// After the next line, nothing executes. It stops in ChildBrowser on my callback_url.
oauth.get('https://api.twitter.com/oauth/access_token?oauth_verifier='+verifier+'&'+requestParams,
function(data) {
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]);
// Save access token/key in localStorage
var accessData = {};
accessData.accessTokenKey = accessParams.oauth_token;
accessData.accessTokenSecret = accessParams.oauth_token_secret;
// SETTING OUR LOCAL STORAGE
alert("TWITTER: Storing token key/secret in localStorage3");
localStorage.setItem(twitterKey, JSON.stringify(accessData));
},
function(data) {
console.log(data);
}
);
oauth.get('https://api.twitter.com/1/account/verify_credentials.json?skip_status=true',
function(data) {
var entry = JSON.parse(data.text);
alert("TWITTER USER: "+entry.screen_name);
// FOR EXAMPLE ONLY
//app.init();
},
function(data) {
alert("ERROR: " + data);
}
);
// Since everything went well we can close our childBrowser!
window.plugins.childBrowser.close();
} else {
// do nothing
}
},
tweet:function() {
var storedAccessData, rawData = localStorage.getItem(twitterKey);
storedAccessData = JSON.parse(rawData); // Parse our JSON object
options.accessTokenKey = storedAccessData.accessTokenKey; // This is saved when they first sign in
options.accessTokenSecret = storedAccessData.accessTokenSecret; // this is saved when they first sign in
// jsOAuth takes care of everything for us we just need to provide the options
oauth = OAuth(options);
oauth.get('https://api.twitter.com/1/account/verify_credentials.json?skip_status=true',
function(data) {
var entry = JSON.parse(data.text);
Twitter.post();
}
);
},
/*
Now that we have the information we can Tweet!
*/
post:function() {
var theTweet = $("#tweet").val(); // Change this out for what ever you want!
oauth.post('https://api.twitter.com/1/statuses/update.json',
{ 'status' : theTweet, // jsOAuth encodes for us
'trim_user' : 'true' },
function(data) {
var entry = JSON.parse(data.text);
alert(entry);
// FOR THE EXAMPLE
app.done();
},
function(data) {
alert(data);
}
);
}
};
/* -- Twitter END -- */
只是要檢查您的twitter應用程序中的回調URL也是http:// beaconize .com和http:// www。 beaconize .com - 是嗎? –
也有你檢查,看看既驗證者和requestParams具有值之前擊中該功能? –
是這兩個回調匹配爲「http:// beaconize .com /」。在啓動函數之前,我會測試以查看這些變量中顯示的內容。 – Karl