From b8297142996076c290736231ce14890673f4f32a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=86=8C=EC=9A=B8=EC=B9=98=ED=82=A8?= <90738604+soulchicken@users.noreply.github.com> Date: Wed, 11 Oct 2023 00:09:02 +0900 Subject: [PATCH] =?UTF-8?q?Feat:=20=ED=86=A0=ED=81=B0=EC=9D=98=20exp=20?= =?UTF-8?q?=ED=99=95=EC=9D=B8=ED=95=98=EB=8A=94=20util=20=ED=95=A8?= =?UTF-8?q?=EC=88=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/services/auth.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/utils/services/auth.ts diff --git a/src/utils/services/auth.ts b/src/utils/services/auth.ts new file mode 100644 index 0000000..64655a3 --- /dev/null +++ b/src/utils/services/auth.ts @@ -0,0 +1,23 @@ +import jwtDecode from 'jwt-decode'; + +interface DecodedToken { + exp?: number; // 'exp'는 JWT 토큰의 만료 시간을 나타내는 UNIX 타임스탬프입니다. +} + +// eslint-disable-next-line import/prefer-default-export +export const isTokenExpired = (token: string) => { + try { + const decoded: DecodedToken = jwtDecode(token); + + if (!decoded.exp) { + return true; // 'exp' 필드가 없는 경우 토큰을 만료된 것으로 간주 + } + + const currentTime = Date.now() / 1000; // 현재 시간을 UNIX 타임스탬프로 변환 + + return currentTime > decoded.exp; // 만료 시간보다 현재 시간이 큰 경우 토큰은 만료된 것으로 간주 + } catch (error) { + // 토큰 디코딩 중 오류가 발생한 경우 토큰을 만료된 것으로 간주 + return true; + } +};