Estoy tratando de obtener un token de acceso de un punto final de API en cartero utilizando el flujo basic authentication .
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) } })Sigue devolviendo una solicitud incorrecta 400. ¿Estoy haciendo algo mal?
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 le brinda los parámetros de consulta en la URL (por ejemplo, https://www.somewebsite.com/api?code=supersecretcode ), mientras que en cartero lo proporciona como el cuerpo de la solicitud. Puedes hacerlo de dos maneras:
Use parámetros de consulta en la URL en lugar de en el cuerpo de su solicitud de cartero; esto es tan simple como mover todo lo que está en el cuerpo de su solicitud a la URL ( http://localhost:4000/epic?code=supersecretcode&grant_type=authorization_code&scope=basic_profile )
Analice el cuerpo de la solicitud en su servidor. Estoy usando el útil paquete body-parser en este ejemplo:
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", }) // ... })