From b200731d17953fddf0cbe1c1331f8c5eb9a181b6 Mon Sep 17 00:00:00 2001 From: archer <545436317@qq.com> Date: Tue, 9 May 2023 11:26:11 +0800 Subject: [PATCH] feat: cookie expired time --- src/pages/api/user/loginByPassword.ts | 4 ++-- src/pages/api/user/register.ts | 4 ++-- src/pages/api/user/updatePasswordByCode.ts | 4 ++-- src/service/response.ts | 3 ++- src/service/utils/tools.ts | 10 ++++++++++ 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/pages/api/user/loginByPassword.ts b/src/pages/api/user/loginByPassword.ts index d52a733be..831a96fca 100644 --- a/src/pages/api/user/loginByPassword.ts +++ b/src/pages/api/user/loginByPassword.ts @@ -3,7 +3,7 @@ import type { NextApiRequest, NextApiResponse } from 'next'; import { jsonRes } from '@/service/response'; import { connectToDatabase } from '@/service/mongo'; import { User } from '@/service/models/user'; -import { generateToken } from '@/service/utils/tools'; +import { setCookie } from '@/service/utils/tools'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { @@ -32,7 +32,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) throw new Error('密码错误'); } - res.setHeader('Set-Cookie', `token=${generateToken(user._id)}; Path=/; HttpOnly`); + setCookie(res, user._id); jsonRes(res, { data: { diff --git a/src/pages/api/user/register.ts b/src/pages/api/user/register.ts index 976721cf8..0292dd769 100644 --- a/src/pages/api/user/register.ts +++ b/src/pages/api/user/register.ts @@ -4,7 +4,7 @@ import { jsonRes } from '@/service/response'; import { User } from '@/service/models/user'; import { AuthCode } from '@/service/models/authCode'; import { connectToDatabase } from '@/service/mongo'; -import { generateToken } from '@/service/utils/tools'; +import { setCookie } from '@/service/utils/tools'; import { UserAuthTypeEnum } from '@/constants/common'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { @@ -56,7 +56,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< username }); - res.setHeader('Set-Cookie', `token=${generateToken(user._id)}; Path=/; HttpOnly`); + setCookie(res, user._id); jsonRes(res, { data: { diff --git a/src/pages/api/user/updatePasswordByCode.ts b/src/pages/api/user/updatePasswordByCode.ts index c90b535f2..736b6c06d 100644 --- a/src/pages/api/user/updatePasswordByCode.ts +++ b/src/pages/api/user/updatePasswordByCode.ts @@ -4,8 +4,8 @@ import { jsonRes } from '@/service/response'; import { User } from '@/service/models/user'; import { AuthCode } from '@/service/models/authCode'; import { connectToDatabase } from '@/service/mongo'; -import { generateToken } from '@/service/utils/tools'; import { UserAuthTypeEnum } from '@/constants/common'; +import { setCookie } from '@/service/utils/tools'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { @@ -48,7 +48,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< throw new Error('获取用户信息异常'); } - res.setHeader('Set-Cookie', `token=${generateToken(user._id)}; Path=/; HttpOnly`); + setCookie(res, user._id); jsonRes(res, { data: { diff --git a/src/service/response.ts b/src/service/response.ts index 319cbf5d4..e0b0df9a2 100644 --- a/src/service/response.ts +++ b/src/service/response.ts @@ -1,5 +1,6 @@ import { NextApiResponse } from 'next'; import { openaiError, openaiError2, proxyError, ERROR_RESPONSE, ERROR_ENUM } from './errorCode'; +import { clearCookie } from './utils/tools'; export interface ResponseType { code: number; @@ -23,7 +24,7 @@ export const jsonRes = ( if (ERROR_RESPONSE[errResponseKey]) { // login is expired if (errResponseKey === ERROR_ENUM.unAuthorization) { - res.setHeader('Set-Cookie', 'token=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT'); + clearCookie(res); } return res.json(ERROR_RESPONSE[errResponseKey]); diff --git a/src/service/utils/tools.ts b/src/service/utils/tools.ts index 66665dfd0..f657935e0 100644 --- a/src/service/utils/tools.ts +++ b/src/service/utils/tools.ts @@ -1,3 +1,4 @@ +import type { NextApiResponse } from 'next'; import crypto from 'crypto'; import jwt from 'jsonwebtoken'; @@ -19,6 +20,15 @@ export const generateToken = (userId: string) => { return token; }; +/* set cookie */ +export const setCookie = (res: NextApiResponse, userId: string) => { + res.setHeader('Set-Cookie', `token=${generateToken(userId)}; Path=/; HttpOnly; Max-Age=604800`); +}; +/* clear cookie */ +export const clearCookie = (res: NextApiResponse) => { + res.setHeader('Set-Cookie', 'token=; Path=/; Max-Age=0'); +}; + /* openai axios config */ export const axiosConfig = () => ({ httpsAgent: global.httpsAgent,