【问题标题】:401 (Unauthorized) only in release mode. Debugging, everything works perfectly! Why?401(未授权)仅在发布模式下。调试,一切正常!为什么?
【发布时间】:2012-01-14 12:37:01
【问题描述】:

我正在为 Google Chrome 创建一个扩展程序,但在使用 Twitter 进行身份验证时遇到问题。

此扩展发布于this link

如您所见,我也在使用 Dropbox API(它也适用于 OAuth 1.0)并且它运行良好!

要使用 OAuth,请使用名为 jsOAuth 的库,该库位于 this link

当用户点击“推特”时,会出现一个窗口(弹窗),看起来是真实的:

//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);
    });
});

然后显示认证窗口

完整链接: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)

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

问题

怎么了?

一步步调试,认证成功!?!为什么?

【问题讨论】:

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


    【解决方案1】:

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

    附带说明,即使在获得access_token 时,您也包括oauth_callback。这不是首选。

    【讨论】:

    • 如果出现错误,系统会重试。 401 发生在两次调用中(在第一次和第二次尝试中)。
    • 我第二次尝试得到 200。您可能遇到的是 Twitter 基础架构中的复制滞后。您在一台服务器上授权了 request_token,而获取 access_token 的请求到达了另一台没有意识到它已被授权的服务器。尝试在获取 access_token 之前添加 5 秒超时。
    猜你喜欢
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 2011-03-04
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    相关资源
    最近更新 更多