我試圖驗證Last.fm會話,並且正努力正確簽署會話密鑰請求。在Jquery中使用Last.fm進行身份驗證 - 提供的方法簽名無效
我不斷收到Invalid method signature supplied
但是,當我md5哈希我認爲查詢應該由JS以外組成,我得到相同的簽名。我想必須在字符串中包含錯誤的數據,但無法弄清楚什麼。
我知道還有其他一些問題,我已經通過他們所有人看到這裏出了什麼問題,但我發誓它看起來是對我的。
這是簽名算法和Ajax調用。我試圖留下足夠的樣本數據。
// Set elsewhere but hacked into this example:
var last_fm_data = {
'last_token':'TOKEN876234876',
'user': 'bob',
'secret': 'SECRET348264386'
};
// Kick it off.
last_fm_call('auth.getSession', {'token': last_fm_data['last_token']});
// Low level API call, purely builds a POSTable object and calls it.
function last_fm_call(method, data){
// param data - dictionary.
last_fm_data[method] = false;
// Somewhere to put the result after callback.
// Append some static variables
data['api_key'] = "APIKEY1323454";
data['format'] = 'json';
data['method'] = method;
post_data = last_fm_sign(data);
$.ajax({
type: "post",
url: last_url,
data: post_data,
success: function(res){
last_fm_data[method] = res;
console.log(res['key'])// Should return session key.
},
dataType: 'json'
});
}
function last_fm_sign(params){
ss = "";
st = [];
so = {};
Object.keys(params).forEach(function(key){
st.push(key); // Get list of object keys
});
st.sort(); // Alphabetise it
st.forEach(function(std){
ss = ss + std + params[std]; // build string
so[std] = params[std]; // return object in exact same order JIC
});
// console.log(ss + last_fm_data['secret']);
// api_keyAPIKEY1323454formatjsonmethodauth.getSessiontokenTOKEN876234876SECRET348264386
hashed_sec = unescape(encodeURIComponent($.md5(ss + last_fm_data['secret'])));
so['signature'] = hashed_sec; // Correct when calculated elsewhere.
return so; // Returns signed POSTable object
}
任何人都可以看到我在這裏失蹤?我絕對難住爲什麼這不會以請求的格式here返回正確簽名的POSTable對象。謝謝你的時間。
編輯:如果我沒有得到任何建議,不能感謝任何人的時間!沒有人對last.fm有過任何經驗?
嘗試移除'數據[「格式」] =「JSON」所示的2線;' – George
謝謝,我會與沿嘗試此回答如下。 – TechnicalChaos
乾杯,儘管稍微偏離 - 我已經編輯了我自己的答案,下面是關於format屬性的內容。 – TechnicalChaos