From 5cdcb8bb02ab78e20abb9bedadbfa7633d982a1e Mon Sep 17 00:00:00 2001 From: Umar Adilov <99314948+adilovcode@users.noreply.github.com> Date: Sat, 3 May 2025 14:00:59 +0500 Subject: [PATCH] Fixed auth middleware --- src/app/api/auth/login/route.ts | 38 +++++++++++++----------------- src/app/api/bonus/info/route.ts | 5 ++-- src/shared/api/base-api.ts | 11 ++++++++- src/widgets/transactions-table.tsx | 10 ++++---- 4 files changed, 33 insertions(+), 31 deletions(-) diff --git a/src/app/api/auth/login/route.ts b/src/app/api/auth/login/route.ts index c042d92..b156a93 100644 --- a/src/app/api/auth/login/route.ts +++ b/src/app/api/auth/login/route.ts @@ -14,33 +14,29 @@ const routeHandler = async (req: NextRequest) => { .merge(z.object({ type: z.enum(['bonus', 'corporate']) })) .parse(body); - try { - const oriyoResponse = await oriyoClient.get('/client/login', { - params: { - type: validatedBody.type, - phone: validatedBody.phoneNumber, - uid: validatedBody.cardNumber, - }, - }); + const oriyoResponse = await oriyoClient.get('/client/login', { + params: { + type: validatedBody.type, + phone: validatedBody.phoneNumber, + uid: validatedBody.cardNumber, + }, + }); - const parsedResponse = JSON.parse(oriyoResponse.data); + if (oriyoResponse.data.error) + return NextResponse.json({ error: 'Credentials error' }, { status: 401 }); - if (!parsedResponse.token) { - return NextResponse.json({ error: 'Credentials error' }, { status: 401 }); - } + const response = NextResponse.json({ success: true }); - const response = NextResponse.json({ success: true }); - - response.cookies.set(`${validatedBody.type}__token`, oriyoResponse.data, { + response.cookies.set( + `${validatedBody.type}__token`, + JSON.stringify(oriyoResponse.data), + { path: '/', maxAge: 2 * 60 * 60, - }); + }, + ); - return response; - } catch (error) { - console.error('login error:', error); - return NextResponse.json({ error: 'Server error' }, { status: 500 }); - } + return response; }; export const POST = validationErrorHandler(routeHandler); diff --git a/src/app/api/bonus/info/route.ts b/src/app/api/bonus/info/route.ts index a6ed56e..5954ca5 100644 --- a/src/app/api/bonus/info/route.ts +++ b/src/app/api/bonus/info/route.ts @@ -21,7 +21,6 @@ const routeHandler = async (req: NextRequest, requestCookie: RequestCookie) => { }); }; -export const GET = authorizationMiddleware( - validationErrorHandler(routeHandler), - 'bonus__token', +export const GET = validationErrorHandler( + authorizationMiddleware(routeHandler, 'bonus__token'), ); diff --git a/src/shared/api/base-api.ts b/src/shared/api/base-api.ts index 71616da..03478bd 100644 --- a/src/shared/api/base-api.ts +++ b/src/shared/api/base-api.ts @@ -1,4 +1,5 @@ import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'; +import { has } from 'lodash'; import { toast } from 'sonner'; const baseQuery = fetchBaseQuery({ @@ -22,7 +23,15 @@ export const baseAPI = createApi({ if (result.error) { switch (result.error.status) { case 401: - toast.error('Login credentials error'); + if ( + has(result.error.data, 'error') && + result.error.data.error === 'Credentials error' + ) { + toast.error('Login credentials error'); + break; + } + + window.location.href = '/login'; break; case 500: diff --git a/src/widgets/transactions-table.tsx b/src/widgets/transactions-table.tsx index f39250e..78ce852 100644 --- a/src/widgets/transactions-table.tsx +++ b/src/widgets/transactions-table.tsx @@ -1,6 +1,6 @@ 'use client'; -import { format, subMonths } from 'date-fns'; +import { format } from 'date-fns'; import { ru } from 'date-fns/locale'; import { CalendarIcon } from 'lucide-react'; import { useEffect, useState } from 'react'; @@ -8,7 +8,7 @@ import { useEffect, useState } from 'react'; import { TransactionRequest, TransactionResponse, -} from '@/entities/bonus/model/types/bonus-client-info.type'; +} from '@/entities/transactions/model/types'; import { useTextController } from '@/shared/language/hooks/use-text-controller'; import { Button } from '@/shared/shadcn-ui/button'; @@ -46,10 +46,8 @@ export const TransactionsTable = ({ data, onChange, }: TransactionsTableProps) => { - const [startDate, setStartDate] = useState( - subMonths(new Date(), 1), - ); - const [endDate, setEndDate] = useState(new Date()); + const [startDate, setStartDate] = useState(undefined); + const [endDate, setEndDate] = useState(undefined); const [currentPage, setCurrentPage] = useState(1); const [itemsPerPage, setItemsPerPage] = useState(10);