Access-Control-Allow-Origin driving me insane, help

Hi guys im new to developing web apps, im currently working on my web app, ive been developing locally and I wanted it to deploy it.

So I have a backend written in express and the frontend in nextjs.

**BACKEND: ** https://shiftmate-backend.onrender.com
**FRONTEND: ** https://shiftmate-frontend.vercel.app/

my backend is up and running, ive sent api requests using postman and it works just fine, ive also tried connecting to the backend while I hosted my frontend locally on my PC and it connected to the backend.

I deployed my frontend to vercel

now on my login page: FRONTEND_URL/auth/login (I can only post 2 links per post)

I can’t login, when it tried to make the api request I get Origin FRONTEND_URL is not allowed by Access-Control-Allow-Origin. Status code: 204

Fetch API cannot load BACKEND_URL/api/business/login/ due to access control checks.

picture of the error:

this is my server.ts in my express backend.

import Express from "express";
import dotenv  from "dotenv"
import cors from 'cors';
import cookieParser from 'cookie-parser';
import mongoose from "mongoose";
import businessRouter from "./routes/businessRoute";
import employeeRouter from "./routes/employeeRoute";
import weekRouter from "./routes/weekRoute";
import shiftRouter from "./routes/shiftRoute";
import profileRouter from "./routes/profileRoute";

dotenv.config();
// Express app
const app = Express();

app.use((req, res, next) => {
    res.setHeader('Access-Control-Allow-Origin', 'https://shiftmate-frontend.vercel.app');
    res.setHeader('Access-Control-Allow-Methods', '*');
    res.setHeader('Access-Control-Allow-Headers', '*');
    res.setHeader('Access-Control-Allow-Credentials', 'true');
    next();
});

// Use cookies
app.use(cookieParser());

// Allow for request body to be accessed
app.use(Express.json());

app.use((req, res, next) => {
    const accessToken = req.cookies.access_token ? '\x1b[32mTrue\x1b[0m' : '\x1b[31mFalse\x1b[0m';
    console.log(`\x1b[1m\x1b[37m[${new Date().toLocaleTimeString([], {hour12: false, hourCycle: 'h23'})}] \x1b[1m\x1b[33m[Server] [Debug]\x1b[0m - Path: ${req.path} - Method: ${req.method} - Body: ${JSON.stringify(req.body)} - Access Token: ${accessToken}`);
    next(); // this has to be called
});

// route handlers
app.use('/api/business', businessRouter);
app.use('/api/employee', employeeRouter);
app.use('/api/week', weekRouter);
app.use('/api/shift', shiftRouter);
app.use('/api/profile', profileRouter);

mongoose.connect(process.env.MONGO_URI!)
    .then(() => {
        console.log('\x1b[1m\x1b[33m[Server]\x1b[0m Connected to the database!');
        app.listen(process.env.PORT, () => {
            console.log(`\x1b[1m\x1b[33m[Server]\x1b[0m Listening on port:\x1b[1m\x1b[33m ${process.env.PORT} \x1b[0m`);
        })
    })
    .catch((error: Error) => {
        console.log(error.message);
    });

and here is the request in my frontend:

async function onSubmit(values: z.infer<typeof formSchema>) {

        setLoading(true);

        const {email, password} = values;

        console.log(email, password)

        const response = await fetch('https://shiftmate-backend.onrender.com/api/business/login/', {
            method: 'POST',
            body: JSON.stringify({email, password}),
            headers: {
                'Content-Type': 'application/json',
                'Access-Control-Allow-Origin': 'https://shiftmate-backend.onrender.com/' 
            },
            credentials: "include"
        });

        const json = await response.json();

        if (!response.ok) {
            toast({
                className: "absolute top-0 right-0",
                variant: "destructive",
                title: "Uh oh! Something went wrong.",
                description: json.error,
            });
            form.reset();
        }

        if (response.ok) {
            toast({
                className: "absolute top-0 right-0",
                variant: "success",
                title: "Successfully logged in!",
                description: json.message,
            });
            form.reset();
            router.push('/app/home');
        }

        setLoading(false);
    }

ive been googling, reading forums, trying solutions other people have said worked for them, and I still keep getting the same error, and its driving me crazy, been at this for a few hours now with no success, any help would be greatly appreciated :slight_smile:

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.