diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx
index fc8a7ed..7dec856 100644
--- a/frontend/src/App.tsx
+++ b/frontend/src/App.tsx
@@ -7,11 +7,15 @@ import TaskDetails from './pages/TaskDetails';
import CalendarPage from './pages/CalendarPage';
import { supabase } from './lib/supabase';
import ProtectedRoute from './components/ProtectedRoute';
+import {useEffect, useState} from "react";
function Navigation() {
- const location = useLocation();
+
+ const location = useLocation();
const navigate = useNavigate();
+ const [fullName, setFullName] = useState('');
+
const handleLogout = async () => {
const { error } = await supabase.auth.signOut();
@@ -23,6 +27,25 @@ function Navigation() {
navigate('/');
};
+ useEffect(() => {
+ const loadUser = async () => {
+ const { data, error } = await supabase.auth.getUser();
+
+ if (error) {
+ console.error('Ошибка получения пользователя:', error.message);
+ return;
+ }
+
+ const firstName = data.user?.user_metadata?.first_name ?? '';
+ const lastName = data.user?.user_metadata?.last_name ?? '';
+
+ const name = `${firstName} ${lastName}`.trim();
+ setFullName(name);
+ console.log(name);
+ };
+
+ loadUser();
+ }, []);
// Если мы на странице авторизации, шапку не показываем
if (location.pathname === '/') return null;
@@ -31,21 +54,26 @@ function Navigation() {
UniFlow
diff --git a/frontend/src/pages/AuthPage.tsx b/frontend/src/pages/AuthPage.tsx
index b044f38..e477f6c 100644
--- a/frontend/src/pages/AuthPage.tsx
+++ b/frontend/src/pages/AuthPage.tsx
@@ -4,9 +4,14 @@ import { supabase } from '../lib/supabase';
export default function AuthPage() {
const [isLogin, setIsLogin] = useState(true);
+
+ const [firstName, setFirstName] = useState('');
+ const [lastName, setLastName] = useState('');
+
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [confirmPassword, setConfirmPassword] = useState('');
+
const [error, setError] = useState('');
const [loading, setLoading] = useState(false);
@@ -29,6 +34,14 @@ export default function AuthPage() {
checkSession();
}, [navigate]);
+ const resetForm = () => {
+ setFirstName('');
+ setLastName('');
+ setEmail('');
+ setPassword('');
+ setConfirmPassword('');
+ };
+
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
@@ -45,6 +58,21 @@ export default function AuthPage() {
return;
}
+ if (!firstName.trim()) {
+ setError('Введите имя');
+ return;
+ }
+
+ if (!lastName.trim()) {
+ setError('Введите фамилию');
+ return;
+ }
+
+ if (!confirmPassword.trim()) {
+ setError('Повторите пароль');
+ return;
+ }
+
if (password !== confirmPassword) {
setError('Пароли не совпадают');
return;
@@ -56,6 +84,12 @@ export default function AuthPage() {
const { data, error } = await supabase.auth.signUp({
email: email.trim(),
password,
+ options: {
+ data: {
+ first_name: firstName.trim(),
+ last_name: lastName.trim(),
+ },
+ },
});
if (error) {
@@ -63,12 +97,18 @@ export default function AuthPage() {
return;
}
- if (data.user) {
- setEmail('');
- setPassword('');
- setConfirmPassword('');
+ if (data.session) {
+ resetForm();
navigate('/courses');
+ return;
}
+
+ if (data.user) {
+ resetForm();
+ setError('Если аккаунт новый, подтвердите регистрацию через почту. Если такой email уже зарегистрирован, просто войдите.');
+ return;
+ }
+
} catch (err) {
setError(err instanceof Error ? err.message : 'Ошибка регистрации');
} finally {
@@ -102,9 +142,7 @@ export default function AuthPage() {
}
if (data.session) {
- setEmail('');
- setPassword('');
- setConfirmPassword('');
+ resetForm();
navigate('/courses');
}
} catch (err) {
@@ -123,6 +161,33 @@ export default function AuthPage() {