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 并从中获取参数。
那里有一个魔术检查line 315:
var keyval = param.split("=");
if (keyval.length == 2) {
如您所见,网址以#_=_ 结尾,这有点奇怪。
所以首先我决定稍微改写一下这个方法,以摆脱这个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;
};