summaryrefslogtreecommitdiff
path: root/src/components/header
diff options
context:
space:
mode:
authorl3wdfut4pwr <l3wdfut4pwr@gmail.com>2026-04-02 08:36:51 +0300
committerl3wdfut4pwr <l3wdfut4pwr@gmail.com>2026-04-02 08:36:51 +0300
commit1d20080db8a26e4b7dd4071daac1166142592afa (patch)
treeb4c1bbb3725f00515b4d9a3d1cd18584cba36c81 /src/components/header
parent37f51ee88710868a77b4645294cf32862f55e7c4 (diff)
minor improvements
Diffstat (limited to 'src/components/header')
-rw-r--r--src/components/header/AuthDialog.tsx6
-rw-r--r--src/components/header/authdialog/LoginForm.tsx22
-rw-r--r--src/components/header/authdialog/register.ts39
3 files changed, 25 insertions, 42 deletions
diff --git a/src/components/header/AuthDialog.tsx b/src/components/header/AuthDialog.tsx
index 0b4bc74..8c00b81 100644
--- a/src/components/header/AuthDialog.tsx
+++ b/src/components/header/AuthDialog.tsx
@@ -1,5 +1,5 @@
import { Button } from '@/components/ui/button';
-import { DialogContent } from '@/components/ui/dialog';
+import { DialogContent, DialogTitle } from '@/components/ui/dialog';
import { Input } from '@/components/ui/input';
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
import GoogleIcon from '../../../public/icons/google.svg';
@@ -7,10 +7,14 @@ import { InputField } from '../ui/inputfield';
import LoginForm from './authdialog/LoginForm';
import RegisterForm from './authdialog/RegisterForm';
import ResetForm from './authdialog/ResetForm';
+import { VisuallyHidden } from '@radix-ui/react-visually-hidden';
export function AuthDialog() {
return (
<div className="absolute">
<DialogContent className="w-[350px] p-0 bg-transparent border-transparent">
+ <VisuallyHidden>
+ <DialogTitle>Authentication</DialogTitle>
+ </VisuallyHidden>
<Tabs defaultValue="Login">
<div className="flex flex-col gap-[5px] ">
<TabsList className="w-[350px] h-[36px] justify-between bg-background border border-violet rounded-[15px]">
diff --git a/src/components/header/authdialog/LoginForm.tsx b/src/components/header/authdialog/LoginForm.tsx
index ceadbcd..c6cdbcd 100644
--- a/src/components/header/authdialog/LoginForm.tsx
+++ b/src/components/header/authdialog/LoginForm.tsx
@@ -6,6 +6,7 @@ import { InputField } from '@/components/ui/inputfield';
import { useAuthContext } from '@/lib/contexts/Auth.context';
export default function LoginForm() {
+ const API_URL = process.env.NEXT_PUBLIC_API_URL;
const [errors, setErrors] = useState<any>({});
const [loading, setLoading] = useState(false);
const { setUser } = useAuthContext();
@@ -36,27 +37,27 @@ export default function LoginForm() {
body.append('password', password);
try {
- const res = await fetch('http://localhost:8000/api/auth/login', {
+ const res = await fetch(`${API_URL}/api/auth/login`, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: body.toString(),
+ credentials: 'include',
});
- const data = await res.json();
-
if (!res.ok) {
setErrors({ general: 'Неверный логин или пароль' });
- } else if (data.access_token) {
- localStorage.setItem('token', data.access_token);
-
- const meRes = await fetch('http://localhost:8000/api/me', {
- headers: { Authorization: `Bearer ${data.access_token}` },
+ } else {
+ const meRes = await fetch(`${API_URL}/api/me`, {
+ credentials: 'include',
});
+ if (!meRes.ok) throw new Error('Failed to fetch user');
const meData = await meRes.json();
setUser(meData);
}
+ } catch (err) {
+ setErrors({ general: 'Ошибка при авторизации' });
} finally {
setLoading(false);
}
@@ -91,11 +92,6 @@ export default function LoginForm() {
placeholder="Пароль"
name="password"
/>
- {errors.password && (
- <p className="text-red pl-5 text-[12px] leading-[16px] mt-[5px]">
- {errors.password}
- </p>
- )}
{!errors.password && errors.general && (
<p className="text-red pl-5 text-[12px] leading-[16px] mt-[5px]">
{errors.general}
diff --git a/src/components/header/authdialog/register.ts b/src/components/header/authdialog/register.ts
index ba8bceb..46a59f2 100644
--- a/src/components/header/authdialog/register.ts
+++ b/src/components/header/authdialog/register.ts
@@ -1,4 +1,3 @@
-// register.ts
export const validate = (
username: string,
email: string,
@@ -36,20 +35,23 @@ export const validate = (
return newErrors;
};
+const API_URL = process.env.NEXT_PUBLIC_API_URL;
+
export const registerUser = async (
username: string,
email: string,
password: string,
) => {
try {
- const res = await fetch('http://localhost:8000/api/auth/register', {
+ const res = await fetch(`${API_URL}/api/auth/register`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username, email, password }),
+ credentials: 'include',
});
- const data = await res.json();
if (!res.ok) {
+ const data = await res.json();
const { field, message } = data.detail || {};
return {
data: null,
@@ -59,35 +61,16 @@ export const registerUser = async (
};
}
- const body = new URLSearchParams();
- body.append('username', username);
- body.append('password', password);
-
- const loginRes = await fetch('http://localhost:8000/api/auth/login', {
- method: 'POST',
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
- body: body.toString(),
+ const meRes = await fetch(`${API_URL}/api/me`, {
+ credentials: 'include',
});
- const loginData = await loginRes.json();
-
- if (!loginRes.ok) {
- return {
- data: null,
- error: {
- general:
- loginData.detail || 'Ошибка входа после регистрации',
- },
- };
+ if (!meRes.ok) {
+ throw new Error(
+ 'Не удалось получить данные пользователя после регистрации',
+ );
}
- localStorage.setItem('token', loginData.access_token);
- localStorage.setItem('refresh_token', loginData.refresh_token);
-
- const meRes = await fetch('http://localhost:8000/api/me', {
- headers: { Authorization: `Bearer ${loginData.access_token}` },
- });
-
const meData = await meRes.json();
return { data: meData, error: null };