401(未授权)仅在发布模式下。调试,一切都很完美!为什么?

时间:2012-01-13 18:27:54

标签: oauth google-chrome-extension twitter-oauth

我正在为Google Chrome创建扩展程序,但我无法通过Twitter进行身份验证。

此扩展程序发布在this link

正如您所看到的,我也在使用Dropbox API(也可以与OAuth 1.0配合使用),而且效果非常好!

要使用OAuth,请使用this link处提供的名为jsOAuth的库。

当用户点击“Twitter”时,窗口(弹出窗口)似乎变为可信:

//Request Windows token
chrome.windows.create({url: url, type:"popup"}, function(win){
    chrome.tabs.executeScript(win.tabs[0].id, { file: "/scripts/jquery-1.7.1.min.js" }, function() {
        chrome.tabs.executeScript(win.tabs[0].id, { file: "/scripts/querystring-0.9.0-min.js" }, function() {
            chrome.tabs.executeScript(this.args[0], { file: "/scripts/services/TwitterPage.js" });
        });
    });
});

url = _https://api.twitter.com/oauth/authorize?oauth_token = XXX& oauth_token_secret = YYY& oauth_callback_confirmed = true_

TwitterPage.js代码

$(document).ready(function() {
    $("#allow").click(function(){
        var token = $.QueryString("oauth_token");
        var secret = $.QueryString("oauth_token_secret");

        var data = { oauth_token: token, oauth_secret: secret };
        chrome.extension.sendRequest(data);
    });
});

然后显示验证窗口

Request access window

完整链接:http://i.imgur.com/tikh4.png

正如您在上面的代码中看到的,请求被发送到我的扩展程序。 以下是捕获此请求的代码:

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    chrome.windows.remove(sender.tab.windowId, fetchAccessToken);
});

fetchAccessToken函数:

fetchAccessToken = function() {
    oauthObj.fetchAccessToken(function(){
            console.log("This code is only executed when debug step by step")
        }, failureHandler);
}

查看控制台,显示错误:GET https://api.twitter.com/oauth/access_token 401 (Unauthorized)

Error

完整图片:http://i.stack.imgur.com/8MgNw.png

问题

有什么问题?

逐步调试,验证成功执行!?!为什么呢?

1 个答案:

答案 0 :(得分:0)

GET /oauth/access_token被要求两次。一个成功,另一个不成功。它可能会获得401,因为request_token仅有效一次。如果你停止它执行两次它应该没问题。

在旁注上,即使在获得oauth_callback时,您也会包含access_token。这不是首选。