Skip to content

Commit ac6a8a6

Browse files
authored
Merge pull request #73 from codeit-moving/release
Release -> main 20241226 20:23 쿠키설정 변경
2 parents 026af83 + f6c0df4 commit ac6a8a6

File tree

12 files changed

+107
-11
lines changed

12 files changed

+107
-11
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ deploy.sh
1212

1313
.http
1414

15-
ERD.md
15+
ERD.md
16+

src/app.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ import customerRouter from "./controllers/customerController";
1717
import userRouter from "./controllers/userController";
1818
import reviewRouter from "./controllers/reviewController";
1919
import notificationRouter from "./controllers/notificationController";
20-
2120
import confirmedQuoteRouter from "./controllers/confirmedQuoteController";
2221
import { scheduleNotification } from "./schedules/notifications";
2322
import { imageCleanup } from "./schedules/images";
23+
2424
const app = express();
2525

2626
//CORS 설정

src/config/cookie.config.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ const clearCookieOption: CookieOptions = {
2323

2424
const sessionOption: CookieOptions = {
2525
httpOnly: true,
26-
secure: false,
27-
sameSite: "lax",
26+
secure: true,
27+
sameSite: "none",
2828
maxAge: 1000 * 60 * 60, //1시간
2929
};
3030

src/controllers/confirmedQuoteController.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ import express from "express";
22
import confirmedQuoteService from "../services/confirmedQuoteService";
33
import { asyncHandle } from "../utils/asyncHandler";
44
import passport from "../middlewares/passport";
5+
import { isCustomer } from "../middlewares/authMiddleware";
56

67
const router = express.Router();
78

89
router.post(
910
"/:id",
1011
passport.authenticate("jwt", { session: false }),
12+
isCustomer,
1113
asyncHandle(async (req, res, next) => {
1214
try {
1315
const { customerId } = req.user as { customerId: number };

src/controllers/moverController.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@ import { asyncHandle } from "../utils/asyncHandler";
33
import express from "express";
44
import checkBoolean from "../utils/checkBoolean";
55
import passport from "passport";
6-
import { optionalJwtAuth } from "../middlewares/authMiddleware";
6+
import {
7+
isCustomer,
8+
isMover,
9+
optionalJwtAuth,
10+
} from "../middlewares/authMiddleware";
711
import upload from "../utils/multer";
812
import { Payload } from "../utils/token.utils";
913

@@ -66,6 +70,7 @@ router.get(
6670
router.get(
6771
"/my-profile",
6872
passport.authenticate("jwt", { session: false }),
73+
isMover,
6974
asyncHandle(async (req, res, next) => {
7075
try {
7176
const { moverId } = req.user as { moverId: number };
@@ -82,6 +87,7 @@ router.get(
8287
router.get(
8388
"/favorite-list",
8489
passport.authenticate("jwt", { session: false }),
90+
isCustomer,
8591
asyncHandle(async (req, res, next) => {
8692
try {
8793
const { limit = "10", nextCursorId = "0" } = req.query;
@@ -127,6 +133,7 @@ router.get(
127133
router.post(
128134
"/:id/favorite",
129135
passport.authenticate("jwt", { session: false }),
136+
isCustomer,
130137
asyncHandle(async (req, res, next) => {
131138
try {
132139
const { customerId } = req.user as { customerId: number };
@@ -146,6 +153,7 @@ router.post(
146153
router.delete(
147154
"/:id/favorite",
148155
passport.authenticate("jwt", { session: false }),
156+
isCustomer,
149157
asyncHandle(async (req, res, next) => {
150158
try {
151159
const { customerId } = req.user as { customerId: number };

src/controllers/movingRequestController.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ import { asyncHandle } from "../utils/asyncHandler";
44
import movingRequest from "../middlewares/validations/movingRequest";
55
import checkBoolean from "../utils/checkBoolean";
66
import passport from "passport";
7+
import { isCustomer, isMover } from "../middlewares/authMiddleware";
78

89
const router = express.Router();
910

1011
//이사요청 목록 조회
1112
router.get(
1213
"/by-mover",
1314
passport.authenticate("jwt", { session: false }),
15+
isMover,
1416
asyncHandle(async (req, res, next) => {
1517
try {
1618
const { moverId } = req.user as { moverId: number };
@@ -60,6 +62,7 @@ router.get(
6062
router.get(
6163
"/by-customer",
6264
passport.authenticate("jwt", { session: false }),
65+
isCustomer,
6366
asyncHandle(async (req, res, next) => {
6467
try {
6568
const { customerId } = req.user as { customerId: number };
@@ -82,6 +85,7 @@ router.get(
8285
router.get(
8386
"/:id/quotes",
8487
passport.authenticate("jwt", { session: false }),
88+
isCustomer,
8589
asyncHandle(async (req, res, next) => {
8690
try {
8791
const { customerId } = req.user as { customerId: number };
@@ -104,6 +108,7 @@ router.get(
104108
router.get(
105109
"/pending-quotes",
106110
passport.authenticate("jwt", { session: false }),
111+
isCustomer,
107112
asyncHandle(async (req, res, next) => {
108113
try {
109114
const { customerId } = req.user as { customerId: number };
@@ -121,6 +126,7 @@ router.get(
121126
router.post(
122127
"/",
123128
passport.authenticate("jwt", { session: false }),
129+
isCustomer,
124130
movingRequest.createMovingRequestValidation, //유효성 검사
125131
asyncHandle(async (req, res, next) => {
126132
try {
@@ -150,6 +156,7 @@ router.post(
150156
router.post(
151157
"/:id/designated",
152158
passport.authenticate("jwt", { session: false }),
159+
isCustomer,
153160
asyncHandle(async (req, res, next) => {
154161
try {
155162
const { id: moverId } = req.params;
@@ -172,6 +179,7 @@ router.post(
172179
router.delete(
173180
"/:id/designated",
174181
passport.authenticate("jwt", { session: false }),
182+
isCustomer,
175183
asyncHandle(async (req, res, next) => {
176184
try {
177185
const { id: moverId } = req.params;

src/controllers/oauthController.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ router.get(
4747
res.cookie("accessToken", accessToken, cookieConfig.accessTokenOption);
4848
res.cookie("refreshToken", refreshToken, cookieConfig.refreshTokenOption);
4949

50-
res.redirect(process.env.FRONTEND_URL || "http://localhost:3000");
50+
res.redirect(process.env.FRONTEND_URL || "http://localhost:3001");
5151
}
5252
);
5353

@@ -87,7 +87,7 @@ router.get(
8787
res.cookie("accessToken", accessToken, cookieConfig.accessTokenOption);
8888
res.cookie("refreshToken", refreshToken, cookieConfig.refreshTokenOption);
8989

90-
res.redirect(process.env.FRONTEND_URL || "http://localhost:3000");
90+
res.redirect(process.env.FRONTEND_URL || "http://localhost:3001");
9191
}
9292
);
9393

@@ -113,14 +113,14 @@ router.get(
113113
res.cookie("accessToken", accessToken, cookieConfig.accessTokenOption);
114114
res.cookie("refreshToken", refreshToken, cookieConfig.refreshTokenOption);
115115

116-
res.redirect(process.env.FRONTEND_URL || "http://localhost:3000");
116+
res.redirect(process.env.FRONTEND_URL || "http://localhost:3001");
117117
}
118118
);
119119

120120
router.get("/kakao/signout", (req, res) => {
121121
res.clearCookie("accessToken");
122122
res.clearCookie("refreshToken");
123-
res.redirect(process.env.FRONTEND_URL || "http://localhost:3000");
123+
res.redirect(process.env.FRONTEND_URL || "http://localhost:3001");
124124
});
125125

126126
export default router;

src/controllers/quoteController.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ import { asyncHandle } from "../utils/asyncHandler";
44
import passport from "passport";
55
import customError from "../utils/interfaces/customError";
66
import quoteValidation from "../middlewares/validations/quote";
7+
import { isCustomer } from "../middlewares/authMiddleware";
78

89
const router = express.Router();
910

1011
//견적서 상세 조회
1112
router.get(
1213
"/:id",
1314
passport.authenticate("jwt", { session: false }),
15+
isCustomer,
1416
asyncHandle(async (req, res, next) => {
1517
try {
1618
const { customerId } = req.user as { customerId: number };

src/env.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,7 @@ export const KAKAO_CALLBACK_URL = process.env.KAKAO_CALLBACK_URL;
2121
export const GOOGLE_CLIENT_ID = process.env.GOOGLE_CLIENT_ID;
2222
export const GOOGLE_CLIENT_SECRET = process.env.GOOGLE_CLIENT_SECRET;
2323
export const GOOGLE_CALLBACK_URL = process.env.GOOGLE_CALLBACK_URL;
24-
export const DEFAULT_PROFILE_IMAGE = process.env.DEFAULT_PROFILE_IMAGE;
24+
export const DEFAULT_PROFILE_IMAGE = process.env
25+
.DEFAULT_PROFILE_IMAGE as string;
26+
27+
export const FRONTEND_URL = process.env.FRONTEND_URL || "http://localhost:3000";

src/middlewares/authMiddleware.ts

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import { Request, Response, NextFunction } from "express";
44
import passport from "passport";
55
import CustomError from "../utils/interfaces/customError";
6+
import userRepository from "../repositorys/userRepository";
7+
import { FRONTEND_URL } from "../env";
68

79
interface authUser {
810
id: number;
@@ -53,3 +55,72 @@ export const optionalJwtAuth = (
5355
}
5456
)(req, res, next);
5557
};
58+
59+
export const isCustomer = async (
60+
req: Request,
61+
res: Response,
62+
next: NextFunction
63+
) => {
64+
const user = req.user as {
65+
id: number;
66+
customerId?: number;
67+
moverId?: number;
68+
};
69+
const findUser = await userRepository.findById(user.id);
70+
71+
if (!findUser) {
72+
const error: CustomError = new Error("Unauthorized");
73+
error.status = 403;
74+
error.data = {
75+
message: "유효하지 않은 사용자입니다.",
76+
};
77+
return next(error);
78+
}
79+
80+
if (!user?.customerId) {
81+
const error: CustomError = new Error("Unauthorized");
82+
error.status = 403;
83+
error.data = {
84+
message: "고객 프로필을 먼저 등록해주세요",
85+
redirectUrl: FRONTEND_URL + "/me/profile",
86+
redirect: true,
87+
};
88+
return next(error);
89+
}
90+
91+
next();
92+
};
93+
94+
export const isMover = async (
95+
req: Request,
96+
res: Response,
97+
next: NextFunction
98+
) => {
99+
const user = req.user as {
100+
id: number;
101+
customerId?: number;
102+
moverId?: number;
103+
};
104+
const findUser = await userRepository.findById(user.id);
105+
if (!findUser) {
106+
const error: CustomError = new Error("Unauthorized");
107+
error.status = 403;
108+
error.data = {
109+
message: "유효하지 않은 사용자입니다.",
110+
};
111+
return next(error);
112+
}
113+
114+
if (!user?.moverId) {
115+
const error: CustomError = new Error("Unauthorized");
116+
error.status = 403;
117+
error.data = {
118+
message: "기사 프로필을 먼저 등록해 주세요.",
119+
redirectUrl: FRONTEND_URL + "/mover/profile",
120+
redirect: true,
121+
};
122+
return next(error);
123+
}
124+
125+
next();
126+
};

0 commit comments

Comments
 (0)