From 96f82b4162c31cebb2ea56359a2169d4736c99b2 Mon Sep 17 00:00:00 2001 From: NikitaTorbenko <2015nekitciti@gmail.com> Date: Sat, 4 Apr 2026 05:57:34 +0300 Subject: [PATCH] feat: create register --- .../src/modules/auth/store/useAuthStore.ts | 17 ++++-- frontend/src/modules/auth/types/auth.types.ts | 4 ++ frontend/src/pages/register.page.tsx | 55 +++++++++++++++---- 3 files changed, 59 insertions(+), 17 deletions(-) diff --git a/frontend/src/modules/auth/store/useAuthStore.ts b/frontend/src/modules/auth/store/useAuthStore.ts index 523cea3..081f837 100644 --- a/frontend/src/modules/auth/store/useAuthStore.ts +++ b/frontend/src/modules/auth/store/useAuthStore.ts @@ -17,12 +17,18 @@ const login = async (credentials: LoginCredentials): Promise => { return response.data; }; -const register = async (data: RegisterData): Promise => { - const response = await apiClient.post("/auth/register", { +const register = async ( + data: RegisterData, +): Promise> => { + const response = await apiClient.post>("/auth/token", { login: data.login, password: data.password, name: data.firstName, last_name: data.lastName, + is_active: data.is_active, + permission_admin: data.permission_admin, + permission_manage_agent: data.permission_manage_agent, + permission_view: data.permission_view, }); return response.data; }; @@ -62,9 +68,10 @@ export const useAuthStore = create()( register: async (data: RegisterData) => { set({ isLoading: true, error: null }); try { - const response = await register(data); - const user = mapResponseToUser(response); - set({ user, token: response.token, isLoading: false }); + await register(data); + // После регистрации пользователь не авторизуется автоматически + // Нужно войти через /auth/login + set({ isLoading: false }); } catch (error) { set({ error: diff --git a/frontend/src/modules/auth/types/auth.types.ts b/frontend/src/modules/auth/types/auth.types.ts index ca4e6d8..ff289a8 100644 --- a/frontend/src/modules/auth/types/auth.types.ts +++ b/frontend/src/modules/auth/types/auth.types.ts @@ -8,6 +8,10 @@ export interface RegisterData { password: string; firstName: string; lastName: string; + is_active?: boolean; + permission_admin?: boolean; + permission_manage_agent?: boolean; + permission_view?: boolean; } export interface LoginResponse { diff --git a/frontend/src/pages/register.page.tsx b/frontend/src/pages/register.page.tsx index 98d8843..7406899 100644 --- a/frontend/src/pages/register.page.tsx +++ b/frontend/src/pages/register.page.tsx @@ -5,7 +5,7 @@ import { useAuthStore } from "@/modules/auth/store/useAuthStore"; export const RegisterPage: React.FC = () => { const navigate = useNavigate(); - const { register, isLoading, error, clearError, token } = useAuthStore(); + const { register, isLoading, error, clearError } = useAuthStore(); const [formData, setFormData] = useState({ login: "", password: "", @@ -14,12 +14,7 @@ export const RegisterPage: React.FC = () => { lastName: "", }); const [passwordError, setPasswordError] = useState(null); - - useEffect(() => { - if (token) { - navigate("/"); - } - }, [token, navigate]); + const [successMessage, setSuccessMessage] = useState(null); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); @@ -38,7 +33,17 @@ export const RegisterPage: React.FC = () => { firstName: formData.firstName, lastName: formData.lastName, }); - navigate("/"); + setSuccessMessage("Аккаунт успешно создан! Теперь вы можете войти."); + setFormData({ + login: "", + password: "", + confirmPassword: "", + firstName: "", + lastName: "", + }); + setTimeout(() => { + navigate("/auth"); + }, 2000); } catch (err) { // Error is handled by store } @@ -82,7 +87,10 @@ export const RegisterPage: React.FC = () => { className="w-16 h-16 mx-auto mb-4 rounded-full flex items-center justify-center" style={{ backgroundColor: "var(--bg-secondary)" }} > - +

{ )} + {/* Success Message */} + {successMessage && ( +
+ {successMessage} +
+ )} + {/* Form */}
{/* Name Fields */} @@ -293,8 +315,16 @@ export const RegisterPage: React.FC = () => { className="mt-2 text-sm flex items-center gap-1" style={{ color: "var(--error-text)" }} > - - + + {passwordError}

@@ -311,7 +341,8 @@ export const RegisterPage: React.FC = () => { }} onMouseEnter={(e) => { if (!isLoading) { - e.currentTarget.style.backgroundColor = "var(--button-primary-hover)"; + e.currentTarget.style.backgroundColor = + "var(--button-primary-hover)"; } }} onMouseLeave={(e) => {