Skip to content

Commit

Permalink
토큰 재발급 완료
Browse files Browse the repository at this point in the history
  • Loading branch information
cchoiGeon committed Aug 8, 2024
1 parent 0e44b29 commit 000c5d2
Show file tree
Hide file tree
Showing 6 changed files with 137 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/config/response.status.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,7 @@ export const status = {
TOKEN_EXPIRED: { status: StatusCodes.UNAUTHORIZED, isSuccess: false, code: "403", message: "토큰을 재발급 받아주세요." },
INVALID_TOKEN: { status: StatusCodes.UNAUTHORIZED, isSuccess: false, code: "403", message: "유효하지 않은 토큰입니다." },

// refreshToken err
REFRESH_TOKEN_NOT_PROVIDED: { status: StatusCodes.UNAUTHORIZED, isSuccess: false, code: "401", message: "refresh 토큰이 제공되지 않았습니다." },
REFRESH_TOKEN_INVALID: { status: StatusCodes.UNAUTHORIZED, isSuccess: false, code: "402", message: "유효하지 않은 refresh 토큰입니다." },
};
25 changes: 25 additions & 0 deletions src/domains/refreshToken/refreshToken.controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { response } from "../../config/response.js";
import { status } from "../../config/response.status.js";
import { refreshTokenService } from "./refreshToken.service.js";

export async function refreshTokenLogic(req, res) {
try {
const token = req.cookies.refreshToken;
if (!token) {
return res.send(response(status.REFRESH_TOKEN_NOT_PROVIDED));
}
const result = await refreshTokenService(token);

if (!result.success) {
return res.send(response(status.REFRESH_TOKEN_INVALID));
}

res.cookie('accessToken', result.accessToken, { httpOnly: true, secure: false });
res.cookie('refreshToken', result.refreshToken, { httpOnly: true, secure: false });

return res.send(response(status.SUCCESS));
} catch (err) {
console.error(err);
return res.send(response(status.INTERNAL_SERVER_ERROR));
}
}
24 changes: 24 additions & 0 deletions src/domains/refreshToken/refreshToken.service.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import jwt from 'jsonwebtoken';

export async function refreshTokenService(token) {
try {
const decoded = jwt.verify(token,process.env.JWT_SECRET_KEY);

const accessToken = jwt.sign({
uuid: decoded.uuid,
}, process.env.JWT_SECRET_KEY, {
expiresIn: '5m'
});

const refreshToken = jwt.sign({
uuid: decoded.uuid,
}, process.env.JWT_SECRET_KEY, {
expiresIn: '1h'
});

return { success: true, accessToken, refreshToken };
} catch (err) {
console.error(err);
return { success: false, message: '토큰 인증 오류' };
}
}
2 changes: 2 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { loginRouter } from './routes/login.js';
import { status } from './config/response.status.js';
import { BaseError } from './config/error.js';
import { response } from './config/response.js';
import { refreshTokenRouter } from './routes/refreshToken.js';

const app = express();
const port = 3000;
Expand All @@ -26,6 +27,7 @@ app.use('/api-docs', SwaggerUi.serve, SwaggerUi.setup(specs));

app.use("/FITple/signup",signupRouter);
app.use("/FITple/login",loginRouter);
app.use("/FITple/refreshToken",refreshTokenRouter);

app.use((req, res, next) => {
const err = new BaseError(status.NOT_FOUND);
Expand Down
6 changes: 6 additions & 0 deletions src/routes/refreshToken.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import express from 'express';
import { refreshTokenLogic } from '../domains/refreshToken/refreshToken.controller.js';

export const refreshTokenRouter = express.Router();

refreshTokenRouter.get('/',refreshTokenLogic);
77 changes: 77 additions & 0 deletions src/swagger/refreshToken.swagger.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
paths:
/FITple/refreshToken:
get:
tags:
- RefreshToken
summary: 토큰 재발급
responses:
'200':
description: 토큰 재발급 성공!
schema:
type: object
properties:
isSuccess:
type: boolean
example: true
code:
type: number
example: 200
message:
type: string
example: "success!"
'400':
description: 잘못된 요청
schema:
type: object
properties:
isSuccess:
type: boolean
example: false
code:
type: string
example: 400
message:
type: string
example: 잘못된 요청입니다
'401':
description: refresh 토큰이 존재하지 않음
schema:
type: object
properties:
isSuccess:
type: boolean
example: false
code:
type: string
example: 401
message:
type: string
example: refresh 토큰이 존재하지 않았습니다.
'402':
description: 유효하지 않는 refresh 토큰
schema:
type: object
properties:
isSuccess:
type: boolean
example: false
code:
type: string
example: 402
message:
type: string
example: 유효하지 않은 refresh 토큰입니다.
'500':
description: 서버 에러
schema:
type: object
properties:
isSuccess:
type: boolean
example: false
code:
type: string
example: 500
message:
type: string
example: 서버 에러, 관리자에게 문의 바랍니다.

0 comments on commit 000c5d2

Please sign in to comment.