- Updated the authentication logic in both Auth and useAuth functions to redirect unregistered users to the '/unregistered' page. - Enhanced error handling in the authOptions to check for user registration status using the Telegram ID. - Improved the matcher configuration in middleware to exclude the '/unregistered' route from authentication checks.
44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
/* eslint-disable promise/prefer-await-to-then */
|
|
'use client';
|
|
|
|
import { getTelegramUser } from '@/mocks/get-telegram-user';
|
|
import { LoadingSpinner } from '@repo/ui/components/ui/spinner';
|
|
import { signIn, useSession } from 'next-auth/react';
|
|
import { useTheme } from 'next-themes';
|
|
import { redirect } from 'next/navigation';
|
|
import { useEffect } from 'react';
|
|
|
|
export default function Auth() {
|
|
const { status } = useSession();
|
|
useTheme();
|
|
|
|
useEffect(() => {
|
|
if (status === 'authenticated') {
|
|
redirect('/profile');
|
|
}
|
|
|
|
if (status === 'unauthenticated' && process.env.NODE_ENV === 'development') {
|
|
getTelegramUser().then((user) => {
|
|
signIn('telegram', {
|
|
callbackUrl: '/profile',
|
|
redirect: false,
|
|
telegramId: user?.id?.toString(),
|
|
}).then((result) => {
|
|
if (
|
|
result?.error &&
|
|
(result?.error?.includes('CredentialsSignin') ||
|
|
result?.error?.includes('UNREGISTERED'))
|
|
) {
|
|
// Пользователь не зарегистрирован
|
|
redirect('/unregistered');
|
|
} else if (result?.ok) {
|
|
redirect('/profile');
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}, [status]);
|
|
|
|
return <LoadingSpinner />;
|
|
}
|