0

I was having a ton of issues with CORS in my react app and researched a lot and found out I had to use a proxy.

I tried using a proxy in package.json by adding

"proxy": "https://api.clashroyale.com/",

Then I tried deleting the above and creating setupProxy.js with the following content:

const { createProxyMiddleware } = require('http-proxy-middleware');

module.exports = function(app) {
  app.use(
    '/v1/players',
    createProxyMiddleware({
      target: 'https://api.clashroyale.com/',
      changeOrigin: true,
    })
  );
};

And my request looks like this in app.js and this happens when a button is clicked:

const clicksearch = () => {
        const headers = {
            "Authorization": "Bearer token",
            "Content-Type": "application/json",
        }
        axios.get("v1/players/#123TAG", {headers})
            .then(response => {
                console.log(response.data);
            })
            .catch((error) => {
                console.log('error ' + error);
            });
}

I also tried using https://api.clashroyale.com/v1/players/#123TAG in the .get but also no luck. Any hints on how to fix this would be amazing

The response I get from the server when using https://api.clashroyale.com/v1/players/#123TAG as get request

Access to XMLHttpRequest at
 'https://api.clashroyale.com/v1/players/%232Y900L99' from origin 
'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

And the response I get when using v1/players/#123TAG is

GET http://localhost:3000/v1/players/%232Y900L99 403 (Forbidden)
David
  • 5
  • 4

1 Answers1

-3

You can do CORS control in backend. Before that problem http-proxy-middleware proxy is not working in React js and Spring Boot project. GET API is return 415 status error (Maybe you can help me too :) ) I was blocking that problem too. I solved like that;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Component
public class SimpleCORSFilter implements Filter {

    private final Logger log = LoggerFactory.getLogger(SimpleCORSFilter.class);

    public SimpleCORSFilter() {
        log.info("SimpleCORSFilter init");
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me");

        chain.doFilter(req, res);
    }

    @Override
    public void init(FilterConfig filterConfig) {
    }

    @Override
    public void destroy() {
    }

}