🐛 fix: access cookie via header on logout
Some checks failed
Integration Tests / integration-tests (pull_request) Failing after 51s

This commit is contained in:
2026-02-15 22:58:24 +07:00
parent 42aa7ed8d3
commit c74597c57d
5 changed files with 15 additions and 11 deletions

View File

@ -14,7 +14,7 @@
"arctic": "^3.7.0", "arctic": "^3.7.0",
"aws-sdk": "^2.1692.0", "aws-sdk": "^2.1692.0",
"bcrypt": "^5.1.1", "bcrypt": "^5.1.1",
"cookie": "^1.0.2", "cookie": "^1.1.1",
"elysia": "latest", "elysia": "latest",
"ioredis": "^5.6.1", "ioredis": "^5.6.1",
"joi": "^17.13.3", "joi": "^17.13.3",
@ -454,7 +454,7 @@
"conventional-commit-types": ["conventional-commit-types@3.0.0", "", {}, "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg=="], "conventional-commit-types": ["conventional-commit-types@3.0.0", "", {}, "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg=="],
"cookie": ["cookie@1.0.2", "", {}, "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA=="], "cookie": ["cookie@1.1.1", "", {}, "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ=="],
"core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="],
@ -1384,6 +1384,8 @@
"cz-conventional-changelog/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], "cz-conventional-changelog/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="],
"elysia/cookie": ["cookie@1.0.2", "", {}, "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA=="],
"execa/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], "execa/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="],
"external-editor/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], "external-editor/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="],

View File

@ -28,7 +28,7 @@
"arctic": "^3.7.0", "arctic": "^3.7.0",
"aws-sdk": "^2.1692.0", "aws-sdk": "^2.1692.0",
"bcrypt": "^5.1.1", "bcrypt": "^5.1.1",
"cookie": "^1.0.2", "cookie": "^1.1.1",
"elysia": "latest", "elysia": "latest",
"ioredis": "^5.6.1", "ioredis": "^5.6.1",
"joi": "^17.13.3", "joi": "^17.13.3",

View File

@ -2,10 +2,12 @@ import { Context } from "elysia";
import { mainErrorHandler } from "../../../helpers/error/handler"; import { mainErrorHandler } from "../../../helpers/error/handler";
import { logoutService } from "../services/http/logout.service"; import { logoutService } from "../services/http/logout.service";
import { returnWriteResponse } from "../../../helpers/callback/httpResponse"; import { returnWriteResponse } from "../../../helpers/callback/httpResponse";
import { parse } from "cookie";
export const logoutController = async (ctx: Context) => { export const logoutController = async (ctx: Context) => {
try { try {
const jwtToken = ctx.cookie.auth_token?.value; const jwtToken = parse(ctx.request.headers.get("auth_token") || "")
.auth_token as string;
const serviceResponse = await logoutService(jwtToken); const serviceResponse = await logoutService(jwtToken);
return returnWriteResponse( return returnWriteResponse(
ctx.set, ctx.set,

View File

@ -2,13 +2,12 @@ import { Context } from "elysia";
import { tokenValidationService } from "../services/http/tokenValidation.service"; import { tokenValidationService } from "../services/http/tokenValidation.service";
import { returnReadResponse } from "../../../helpers/callback/httpResponse"; import { returnReadResponse } from "../../../helpers/callback/httpResponse";
import { mainErrorHandler } from "../../../helpers/error/handler"; import { mainErrorHandler } from "../../../helpers/error/handler";
import { parse } from "cookie";
export const tokenValidationController = ( export const tokenValidationController = (ctx: Context) => {
ctx: Context & { body: { token: string } },
) => {
try { try {
const { token } = ctx.body; const { auth_token } = parse(ctx.request.headers.get("cookie") || "");
const validationResult = tokenValidationService(token); const validationResult = tokenValidationService(auth_token as string);
return returnReadResponse( return returnReadResponse(
ctx.set, ctx.set,
200, 200,

View File

@ -1,11 +1,12 @@
import { AppError } from "../../../../helpers/error/instances/app"; import { ErrorForwarder } from "../../../../helpers/error/instances/forwarder";
import { jwtDecode } from "../../../../helpers/http/jwt/decode"; import { jwtDecode } from "../../../../helpers/http/jwt/decode";
export const tokenValidationService = (payload: string) => { export const tokenValidationService = (payload: string) => {
try { try {
if (!payload) return null;
const decoded = jwtDecode(payload); const decoded = jwtDecode(payload);
return decoded; return decoded;
} catch (error) { } catch (error) {
throw new AppError(500, "Token validation failed", error); ErrorForwarder(error);
} }
}; };