4

所以我从http://www.tumblr.com/oauth/authorize?oauth_token=xxx. 我使用这个 Google Chrome OAuth 教程页面并从那里复制文件。

这一切都奏效了,直到有一天我不得不重新授权我的延期。它失败了。

当我得到控制台时,我收到了 400 个 http 结果代码和一条消息Missing or invalid oauth_verifier.

4

1 回答 1

9

1)首先要解决:在哪里oauth_verifier

在授权应用程序时,我查看了 tumblr 提出的请求。有这个http://www.tumblr.com/oauth/authorize?oauth_token=xxx

它被重定向到chrome-extension://jlaojpiafmimgibgdfbmphfkejnlifdn/chrome_ex_oauth.html?chromeexoauthcallback=true&oauth_token=XXX&oauth_verifier=dmbcbNDGj7QatrFznXG587RIM7wI1LG3bnKwYGy5tc2icmUVvE#_=_

验证器已经到位,为什么我们只是不明白呢?我们chrome_ex_oauth.js有这个ChromeExOAuth.formDecode()方法可以解码当前的 url 并从中获取参数。

第 315 行有一个神奇的检查:

var keyval = param.split("=");
if (keyval.length == 2) {

如您所见,url 以#_=_which 结尾,有些奇怪。所以首先我决定稍微重写这个方法来解决这个oauth_verifier问题。

2)它不起作用,oauth_verifier=dmbcbNDGj7QatrFznXG587RIM7wI1LG3bnKwYGy5tc2icmUVvE#_=_所以我决定完全删除这个标签并得到:oauth_verifier=dmbcbNDGj7QatrFznXG587RIM7wI1LG3bnKwYGy5tc2icmUVvE它开始起作用了。

对我来说,这仍然是一个问题:Tumblr 希望我关注的重定向网址末尾的这个标签是什么?


我稍微改变的方法如下所示:

ChromeExOAuth.formDecode = function(encoded) {
  // Cut hash at the end of the url.
  var hash_index = encoded.indexOf('#');
  if ( hash_index > -1 ) {
    encoded = encoded.substring(0, hash_index);
  }

  var params = encoded.split("&");
  var decoded = {};
  for (var i = 0, param; param = params[i]; i++) {
    var keyval = param.split("=");
    if (keyval.length == 2) {
      var key = ChromeExOAuth.fromRfc3986(keyval[0]);
      var val = ChromeExOAuth.fromRfc3986(keyval[1]);
      decoded[key] = val;
    }
  }
  return decoded;
};
于 2013-05-24T21:40:59.237 回答