Express.js deployda duzgun çalışmıyor
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"],
};
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (0)
Henüz kimse cevap yazmadı. İlk cevap yazan sen ol!