需要記住的幾件事,我是一個相當初級的計算機科學專業的學生,??我有幾個大專案。我大部分時間都在使用 java,所以 web 有點新,但似乎很容易習慣。
我正在嘗試向一個端點發送一個 post 請求,該端點將回傳我需要的成員身份 ID。
我一直在嘗試遵循這兩個檔案/指南:
https://github.com/Bungie-net/api/wiki/OAuth-Documentation
https://lowlidev.com.au/destiny/authentication-2#/tab-popup
附帶說明一下,我真的覺得沒有多少“入門”指南可用于使用 Bungie API,但也許這是故意防止人們使用人們的帳戶做愚蠢的事情。
無論如何,我已經成功完成了第一部分,即使用 Bungie 提供的客戶端 ID 使用用戶帳戶授權我的應用程式(在 bungie 開發人員網站上注冊)。這將在 url 中回傳一個代碼,該代碼是您對用戶帳戶的授權代碼。我有一種從 url 中提取它的笨拙的方法,所以任何關于如何改進它的想法都將不勝感激。
document.getElementById("authButton").addEventListener("click", function(event) {
location.href = "https://www.bungie.net/en/OAuth/Authorize?client_id={my-client-id}&response_type=code&state=" makeState(32);
});
var authCode = undefined;
if (window.location.href.includes("code=")) {
removeAuthButton();
authCode = window.location.href;
console.log(authCode);
var codeLoc = authCode.indexOf("code=");
var codeEndLoc = authCode.indexOf("&", 15);
authCode = authCode.substring(codeLoc 5, codeEndLoc);
console.log(authCode);
}
這段代碼是在網頁中按下一個簡單的授權按鈕后才執行的,當我注冊我的應用程式時,bungie 會為我處理重定向回我的頁面。
現在,在此之后,檔案顯示了我需要使用以下內容發出的 POST 請求:
POST https://www.bungie.net/platform/app/oauth/token/ HTTP/1.1
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
為了保持 urlencoded 格式,我使用我找到的答案嘗試了此代碼:
https://stackoverflow.com/a/53189376/16910197
document.getElementById("linkButton").addEventListener("click", function(event) {
fetch('https://www.bungie.net/Platform/App/OAuth/token/', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: new URLSearchParams({
'client_id': "{my-client-id}",
'grant_type': "authorization_code",
'code': authCode
})
}).then(function(response) {
console.log(response);
return response.json();
});
});
這不起作用,我已盡一切可能對其進行修改,以嘗試使其正常作業,但無濟于事。我錯過了什么?
如果需要,這是我要回來的:
Response { type: "cors", url: "https://www.bungie.net/Platform/App/OAuth/token/", redirected: false, status: 400, ok: false, statusText: "Bad Request", headers: Headers, body: ReadableStream, bodyUsed: false }
我對 stackoverflow 有點陌生,這是我的第一個問題,所以如果我能更好地格式化它,請告訴我。
uj5u.com熱心網友回復:
你需要呼叫toString上URLSearchParams發送的Authorization報頭。如果您還沒有,您應該切換您的 API 密鑰以使用“機密”OAuth 客戶端型別
document.getElementById("linkButton").addEventListener("click", function(event) {
fetch('https://www.bungie.net/Platform/App/OAuth/token/', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': `Basic ${window.btoa(`${bungie_client_id}:${bungie_client_secret}`)}`
},
body: new URLSearchParams({
'client_id': "{my-client-id}",
'grant_type': "authorization_code",
'code': authCode
}).toString()
}).then(function(response) {
console.log(response);
return response.json();
});
});
如果沒有,請檢查瀏覽器開發工具中的網路請求,以查看 JavaScript 實際發送到端點的內容。
來自 Destiny API 開發人員,請在我失去理智之前將端點路徑中的“令牌”大寫!
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/335683.html
標籤:javascript 接口 休息
上一篇:RESTfulGET集合API是否應該回傳元素的內容
下一篇:如何根據陣列成員對集合進行排序
