axios returns 进行基本身份验证时的响应代码为 400
Axios returns a response code of 400 when making Basic Authentication
我正在尝试使用 basic authentication
流程从邮递员中的 api 端点获取访问令牌。
app.post('/epic', async (req:Request, res) => {
const code = req.query.code as string
const url = "https://api.epicgames.dev/epic/oauth/v1/token"
const values = new URLSearchParams({
code,
client_id,
client_secret,
scope: "basic_profile",
grant_type: "authorization_code",
})
console.log(code, values)
try {
const res = await axios.post(url, values, {
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
})
console.log(res.data)
return res.data
} catch (error: any) {
console.error(error.message)
throw new Error(error.message)
}
})
它一直返回 400 错误请求。我做错了什么吗?
UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch()
req.query
为您提供 URL 中的查询参数(例如 https://www.somewebsite.com/api?code=supersecretcode
),而在邮递员中,您将其作为请求的正文提供。您可以通过两种方式解决此问题:
在 URL 中使用查询参数,而不是在邮递员请求的正文中 - 这就像将请求正文中的所有内容移动到 URL 一样简单( http://localhost:4000/epic?code=supersecretcode&grant_type=authorization_code&scope=basic_profile
)
在您的服务器中解析请求正文。我在这个例子中使用了有用的 body-parser
包:
const bodyParser = require("body-parser")
app.use(bodyParser.urlencoded({ extended: false })
app.post('/epic', async (req: Request, res) => {
const { code } = req.body
const url = "https://api.epicgames.dev/epic/oauth/v1/token"
const values = new URLSearchParams({
code,
client_id,
client_secret,
scope: "basic_profile",
grant_type: "authorization_code",
})
// ...
})
basic authentication
流程从邮递员中的 api 端点获取访问令牌。
app.post('/epic', async (req:Request, res) => {
const code = req.query.code as string
const url = "https://api.epicgames.dev/epic/oauth/v1/token"
const values = new URLSearchParams({
code,
client_id,
client_secret,
scope: "basic_profile",
grant_type: "authorization_code",
})
console.log(code, values)
try {
const res = await axios.post(url, values, {
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
})
console.log(res.data)
return res.data
} catch (error: any) {
console.error(error.message)
throw new Error(error.message)
}
})
它一直返回 400 错误请求。我做错了什么吗?
UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch()
req.query
为您提供 URL 中的查询参数(例如 https://www.somewebsite.com/api?code=supersecretcode
),而在邮递员中,您将其作为请求的正文提供。您可以通过两种方式解决此问题:
在 URL 中使用查询参数,而不是在邮递员请求的正文中 - 这就像将请求正文中的所有内容移动到 URL 一样简单(
http://localhost:4000/epic?code=supersecretcode&grant_type=authorization_code&scope=basic_profile
)在您的服务器中解析请求正文。我在这个例子中使用了有用的
body-parser
包:
const bodyParser = require("body-parser")
app.use(bodyParser.urlencoded({ extended: false })
app.post('/epic', async (req: Request, res) => {
const { code } = req.body
const url = "https://api.epicgames.dev/epic/oauth/v1/token"
const values = new URLSearchParams({
code,
client_id,
client_secret,
scope: "basic_profile",
grant_type: "authorization_code",
})
// ...
})