v2.5.2
Giriş yap

Express.js deployda duzgun çalışmıyor

Anonim
126 defa görüntülendi

arkadaşlar express.js ile next.js projesi yapıyorum ikisinide deploy ettiğimde login yaparken cookie kaydediliyor ama yönlendirme olmuyor sayfayı da yenilediğimde cookie siliniyor ama localhost da ikiside duzgun çalışıyor express.js kodlarıda böyle


const express = require("express");
const http = require("http");
require("dotenv").config();
const cors = require("cors");
const bodyParser = require("body-parser");
const cookieParser = require("cookie-parser");
const jwt = require("jsonwebtoken");
const dbConnect = require("./libs/db.js");
const auth = require("./routers/Auth.js");

const app = express();
const server = http.createServer(app);

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

app.use(bodyParser.json({ limit: "30mb", extended: true }));
app.use(bodyParser.urlencoded({ limit: "30mb", extended: true }));
app.use(cookieParser());

app.use("/", auth);

const PORT = process.env.PORT || 4000;

server.listen(PORT, async () => {
    await dbConnect();
    console.log(`listening ${PORT}`);
});

Middleware

const jwt = require("jsonwebtoken");
const Enum = require("../config/Enum");

const Authorization = async (req, res, next) => {
    const { cookies, headers } = await req;
    let token;

    if (cookies.token) token = cookies.token;
    else token = headers.token;

    try {
        const decoded = jwt.verify(token, process.env.JWT_SECRET);

        if (decoded && decoded.token !== "") {
            req.userId = decoded.token;
            next();
        } else {
            throw new Error("bir sorun oluştu giriş yapın.");
        }
    } catch (error) {
        res.status(Enum.StatusCode.UNAUTHORIZED)
            .clearCookie("token", { httpOnly: true })
            .json({
                message: ErrorMessage(error),
            });
    }
};

module.exports = Authorization;

Routerlarım

router.get("/auth/me", Authorization, async (req, res) => {
    const { userId } = await req;

    try {
        const user = await UserModel.findById(userId);
        if (!user) throw new Error("böyle bir kullanıcı yok tekrar giriş yapın.");

        const result = {
            id: user.id,
            avatar: user.avatar,
            defaultName: user.defaultName,
            about: user.about,
        };

        res.status(Enum.StatusCode.OK).json({ user: result });
    } catch (error) {
        res.status(Enum.StatusCode.UNAUTHORIZED)
            .clearCookie("token", { httpOnly: true })
            .json({ message: ErrorMessage(error) });
    }
};);

router.post("/auth/login", async (req, res) => {
    const { body } = await req;
    const { phoneNumber, password } = body;

    try {
        const controlUser = await UserModel.findOne({ phoneNumber });
        if (!controlUser) throw new Error("telefon numara yada şifre yanlış");

        const comparePassword = bcrypt.compareSync(password, controlUser.password);
        if (!comparePassword) throw new Error("telefon numara yada şifre yanlış");

        const token = jwt.sign({ token: controlUser.id }, process.env.JWT_SECRET, { expiresIn: "10d" });

        res.status(Enum.StatusCode.OK)
            .cookie("token", token, {
                httpOnly: true,
                secure: process.env.NODE_ENV === "production",
                maxAge: 7 * 24 * 60 * 60 * 1000,
            })
            .json({ message: "giriş yapıldı." });
    } catch (error) {
        res.status(Enum.StatusCode.UNAUTHORIZED).json({
            message: ErrorMessage(error),
        });
    }
};);

next.js kodlarım

try {
    setIsLoading(true);
    const res = await await axios.post(`${url}/auth/login`, body, {
        withCredentials: true,
    });;
    if (res.status === 200) {
            toast.success(res.data.message);
            router.push("/dashboard");
        }
    } catch (error) {
        toast.error(ErrorMessage(error));
    } finally {
        setIsLoading(false);
    }

next.js middlware

import { NextResponse } from "next/server";

export const middleware = (req, res) => {
    const token = req.cookies.get("token");

    if (req.nextUrl.pathname === "/") {
        if (!token) {
            return NextResponse.next();
        } else {
            return NextResponse.redirect(new URL("/dashboard", req.url));
        }
    }

    if (req.nextUrl.pathname.startsWith("/dashboard")) {
        if (!token) {
            return NextResponse.redirect(new URL("/", req.url));
        }
        return NextResponse.next();
    }

    return NextResponse.next();
};

export const config = {
    matcher: ["/", "/dashboard"],
};

Cevap yaz
Cevaplar (0)
Henüz kimse cevap yazmadı. İlk cevap yazan sen ol!