The GET method hits the backend twice in a row

Discussão em 'Angular' iniciado por Gerard, Março 14, 2025.

  1. Gerard

    Gerard Guest

    When I make a GET request from Angular with a token, in the backend (Node + Express), the GET request hits twice. The first one arrives without the token, and the second one arrives with the token.

    When I make the request via Postman, this doesn't happen; only one GET request arrives at the backend with the correct token. When I do it from Angular, the request hits twice. What could be the reason for this?

    The GET request from Angular is made like this:

    public async getAllIngredients(): Promise<Ingredient[]> {
    try {
    return await firstValueFrom(
    this.http.get<Ingredient[]>(
    `${environment.API_URL}/your-chef/ingredients/getIngredients`,
    {
    withCredentials: true,
    }
    )
    );
    } catch (error) {
    throw error;
    }
    }


    And in the backend (Node + Express), I have a middleware that checks if the user has a token:

    const isAuthenticated = (
    req: Request,
    res: Response,
    next: NextFunction
    ): void => {
    try {
    req.session = {};

    // We exclude this routes, because otherwise a user would not be able to log in or register because they would not have a token.
    const excludedRoutes: string[] = ["/user/login", "/user/register"];
    if (excludedRoutes.includes(req.path)) {
    return next();
    }

    console.log(req.method);

    // We ignore when try to checkToken because data has been set on login
    if (req.path !== "/user/checkToken") {
    const data: JwtPayload | string = verifyToken(req.cookies.access_token);
    req.session.user = data as IUserSession;
    }

    next();
    } catch (error: any) {
    if (error.code === ERRORS.USER.INVALID_TOKEN.code) {
    res.status(error.status).send({ message: error.message });
    } else {
    res.status(500).send({ message: "Error when validate authentication" });
    }
    }
    };


    In the backend, I have CORS and middleware configured like this:

    app.use(
    cors({
    origin: process.env.FRONT_END_HOST,
    credentials: true,
    })
    );

    app.use(isAuthenticated);


    The headers of the two GET requests are as follows: First get (wrogn):

    {
    "host": "localhost:3000",
    "connection": "keep-alive",
    "accept": "application/json, text/plain, */*",
    "accept-language": "*",
    "sec-fetch-mode": "cors",
    "user-agent": "node",
    "accept-encoding": "gzip, deflate"
    }


    Secong get (correct):

    {
    "host": "localhost:3000",
    "connection": "keep-alive",
    "sec-ch-ua-platform": "\"Windows\"",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36",
    "accept": "application/json, text/plain, */*",
    "sec-ch-ua": "\"Chromium\";v=\"134\", \"Not:A-Brand\";v=\"24\", \"Google Chrome\";v=\"134\"",
    "sec-ch-ua-mobile": "?0",
    "origin": "http://localhost:4200",
    "sec-fetch-site": "same-site",
    "sec-fetch-mode": "cors",
    "sec-fetch-dest": "empty",
    "referer": "http://localhost:4200/",
    "accept-encoding": "gzip, deflate, br, zstd",
    "accept-language": "es,es-ES;q=0.9,ca;q=0.8,en;q=0.7",
    "cookie": "access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2Nzc1N2YwZGZlYzMxZDgzMWE3OWQ2ZGQiLCJpYXQiOjE3NDE5NTIwMzAsImV4cCI6MTc0MTk1OTIzMH0.hrOWu0WwxX2d7zNqnv1XPeGKw9tAz6FHgcV1gIpQJ3Q",
    "if-none-match": "W/\"128-RGyy7TUC0nG6pCSxdFRvDFMWJbo\""
    }


    I have tried all possible CORS configurations, but nothing works.

    Continue reading...

Compartilhe esta Página