Reddit API - 使用 JavaScript 请求访问令牌
Reddit API - Requesting Access Token using JavaScript
我在使用 Reddit API 检索访问令牌的 POST 请求格式时遇到问题。我正在按照 OAuth2 的说明进行操作,并且能够在用户授予权限后为初始 'code' 解析 URL,但我不知道要在 [=21= 中包含什么】 确切地要求。这是我目前所拥有的,其中 returnCode 是从 URL 解析的代码,但我得到了 401 响应。
async function fetchToken(returnCode) {
const form = new FormData();
form.set('grant_type', 'authorization_code');
form.set('code', returnCode);
form.set('redirect_uri', 'http://localhost:3000/')
const response = await fetch('https://www.reddit.com/api/v1/access_token', {
method: 'POST',
mode: 'no-cors',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
authorization: `Basic clientID + clientSecret`
},
body: form
}).then(r => r.json())
console.log(response);
}
如有任何帮助,我们将不胜感激。
您传递的 FormData
请求 body 将具有 multipart/form-data
的 content-type,而不是必需的 application/x-www-form-urlencoded
。尝试使用 URLSearchParams
代替...
const form = new URLSearchParams({
grant_type: "authorization_code",
code: returnCode,
redirect_uri: "http://localhost:3000/"
})
您的授权header也不正确。 HTTP Basic认证需要你对用户名和密码进行base64编码
const credentials = Buffer.from(`${clientID}:${clientSecret}`).toString("base64")
const res = await fetch('https://www.reddit.com/api/v1/access_token', {
method: "POST",
headers: {
Authorization: `Basic ${credentials}`
},
body: form
})
if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`)
return res.json()
我在使用 Reddit API 检索访问令牌的 POST 请求格式时遇到问题。我正在按照 OAuth2 的说明进行操作,并且能够在用户授予权限后为初始 'code' 解析 URL,但我不知道要在 [=21= 中包含什么】 确切地要求。这是我目前所拥有的,其中 returnCode 是从 URL 解析的代码,但我得到了 401 响应。
async function fetchToken(returnCode) {
const form = new FormData();
form.set('grant_type', 'authorization_code');
form.set('code', returnCode);
form.set('redirect_uri', 'http://localhost:3000/')
const response = await fetch('https://www.reddit.com/api/v1/access_token', {
method: 'POST',
mode: 'no-cors',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
authorization: `Basic clientID + clientSecret`
},
body: form
}).then(r => r.json())
console.log(response);
}
如有任何帮助,我们将不胜感激。
您传递的 FormData
请求 body 将具有 multipart/form-data
的 content-type,而不是必需的 application/x-www-form-urlencoded
。尝试使用 URLSearchParams
代替...
const form = new URLSearchParams({
grant_type: "authorization_code",
code: returnCode,
redirect_uri: "http://localhost:3000/"
})
您的授权header也不正确。 HTTP Basic认证需要你对用户名和密码进行base64编码
const credentials = Buffer.from(`${clientID}:${clientSecret}`).toString("base64")
const res = await fetch('https://www.reddit.com/api/v1/access_token', {
method: "POST",
headers: {
Authorization: `Basic ${credentials}`
},
body: form
})
if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`)
return res.json()