Tengo una aplicación React/Express implementada en Heroku. El problema que tengo es que cuando trabajo en localhost, se llama una vez a la API de inicio de sesión básica como se esperaba por la forma en que se realizó el componente React.
const [searchParams, setSearchParams] = useSearchParams(); let code = searchParams.get("code"); const [state, setState] = useState({ data: null, loading: true }); useEffect(() => { setState((state) => ({ data: state.data, loading: true, })); const getData = async () => { console.log("helloeoeoeoeo"); try { await fetch("https://statifyme.herokuapp.com/login", { method: "POST", credentials: "include", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ code }), }) .then((res) => { if (res.ok) { return res.json(); } else { throw new Error("Failed"); } }) .then((resJson) => { let data = JSON.parse(resJson.response); setState({ data: data, loading: false }); }); } catch (error) { console.log(error); } }; getData(); }, []); if (!state.loading) { return { loading: state.loading, access_token: state.data.access_token }; } }Por el contrario, después de cambiar a Heroku, la llamada API de inicio de sesión se llama tres veces, lo que termina en un error general (el código de autorización de OAuth2 caduca después de la primera llamada, por lo tanto, las siguientes dos llamadas devuelven un error).
Así es como se ve la llamada a la API Express:
app.post("/login", function (req, res) { var code = req.body.code || null; var state = req.body.state || null; console.log({ code }); var options = { method: "POST", url: "https://accounts.spotify.com/api/token", headers: { "Content-Type": "application/x-www-form-urlencoded", }, form: { grant_type: "authorization_code", redirect_uri, code, client_id, client_secret, }, }; request.post(options, function (error, response, body) { if (error) throw new Error(error); let data = JSON.parse(body); console.log(data.refresh_token); res.cookie("refresh_token", data.refresh_token, { maxAge: 30 * 24 * 3600 * 1000, }); // res.cookie("access_token", data.access_token, { // maxAge: data.expires_in * 1000, // }); res.json({ response: response.body, }); }); });Necesito la llamada /login solo una vez, ya que trabajaré con tokens de actualización después, ¿hay alguna forma de evitar que Heroku se comporte o un método por el cual pueda restringir la llamada a una sola instancia y bloquearla después?
Gracias.