Added unauthorized redirect

This commit is contained in:
Umar Adilov 2025-05-03 00:45:20 +05:00
parent cf37fe67e6
commit 7e3c2cf24a
3 changed files with 68 additions and 10 deletions

26
src/middleware.ts Normal file
View File

@ -0,0 +1,26 @@
import { NextRequest, NextResponse } from 'next/server';
export function middleware(req: NextRequest) {
const url = req.nextUrl.clone();
const path = url.pathname;
if (
path.startsWith('/customer-dashboard') ||
path.startsWith('/corporate-dashboard')
) {
const token = req.cookies.get(
`${path.includes('customer') ? 'bonus' : 'corporate'}__token`,
);
if (!token) {
url.pathname = '/login';
return NextResponse.redirect(url);
}
}
return NextResponse.next();
}
export const config = {
matcher: ['/customer-dashboard/:path*', '/corporate-dashboard/:path*'],
};

View File

@ -1,5 +1,6 @@
'use client';
import { deleteCookie } from 'cookies-next';
import { subMonths } from 'date-fns';
import { Building2, LogOut, Wallet } from 'lucide-react';
import { useState } from 'react';
@ -104,9 +105,16 @@ export function CorporateDashboard() {
<div className='flex min-h-screen flex-col px-2.5'>
<main className='flex-1 py-10'>
<div className='container mx-auto max-w-6xl'>
<div className='mb-4 flex flex-col gap-4 items-start sm:justify-between sm:items-center sm:mb-8 sm:flex-row'>
<div className='mb-4 flex flex-col items-start gap-4 sm:mb-8 sm:flex-row sm:items-center sm:justify-between'>
<h1 className='text-3xl font-bold'>{t('corporate.pageTitle')}</h1>
<Button variant='outline' className='gap-2'>
<Button
variant='outline'
className='gap-2'
onClick={() => {
deleteCookie(`corporate__token`);
window.location.reload();
}}
>
<LogOut className='h-4 w-4' />
{t('corporate.logoutButton')}
</Button>
@ -114,7 +122,11 @@ export function CorporateDashboard() {
<div className='mb-10 grid gap-3 md:grid-cols-3 md:gap-6'>
{/* Company Card */}
<Card data-aos='zoom-in' data-aos-mirror="true" className='md:col-span-2'>
<Card
data-aos='zoom-in'
data-aos-mirror='true'
className='md:col-span-2'
>
<CardHeader className='pb-2'>
<CardTitle className='flex items-center gap-2'>
<Building2 className='h-5 w-5 text-red-600' />
@ -178,7 +190,11 @@ export function CorporateDashboard() {
</Card>
{/* Fund Card */}
<Card data-aos='zoom-in' data-aos-mirror="true" className='bg-gradient-to-br from-red-600 to-red-800 text-white'>
<Card
data-aos='zoom-in'
data-aos-mirror='true'
className='bg-gradient-to-br from-red-600 to-red-800 text-white'
>
<CardHeader>
<CardTitle className='flex items-center gap-2'>
<Wallet className='h-5 w-5' />

View File

@ -1,9 +1,11 @@
'use client';
import { deleteCookie } from 'cookies-next';
import { ArrowUpRight, Clock, CreditCard, LogOut, User } from 'lucide-react';
import { useFetchMyBonusInfoQuery } from '@/entities/bonus/api/bonus.api';
import Loader from '@/shared/components/loader';
import { useTextController } from '@/shared/language/hooks/use-text-controller';
import { Button } from '@/shared/shadcn-ui/button';
import {
@ -15,7 +17,6 @@ import {
} from '@/shared/shadcn-ui/card';
import { TransactionsTable } from '@/widgets/transactions-table';
import Loader from '@/shared/components/loader';
export function CustomerDashboard() {
const { t } = useTextController();
@ -28,14 +29,25 @@ export function CustomerDashboard() {
<div className='container mx-auto max-w-6xl'>
<div className='mb-8 flex items-center justify-between'>
<h1 className='text-3xl font-bold'>{t('customer.pageTitle')}</h1>
<Button variant='outline' className='gap-2'>
<Button
variant='outline'
className='gap-2'
onClick={() => {
deleteCookie(`bonus__token`);
window.location.reload();
}}
>
<LogOut className='h-4 w-4' />
{t('customer.logoutButton')}
</Button>
</div>
<div className='mb-10 grid gap-3 md:grid-cols-3 md:gap-6'>
<Card data-aos="zoom-in" data-aos-mirror="true" className='bg-gradient-to-br from-red-600 to-red-800 text-white'>
<Card
data-aos='zoom-in'
data-aos-mirror='true'
className='bg-gradient-to-br from-red-600 to-red-800 text-white'
>
{!data || isLoading ? (
<Loader />
) : (
@ -73,7 +85,11 @@ export function CustomerDashboard() {
{/* Bonus Card */}
{/* Customer Card */}
<Card data-aos="zoom-in" data-aos-mirror="true" className='md:col-span-2'>
<Card
data-aos='zoom-in'
data-aos-mirror='true'
className='md:col-span-2'
>
<CardHeader className='pb-2'>
<CardTitle className='flex items-center gap-2'>
<User className='h-5 w-5 text-red-600' />