@@ -103,7 +135,7 @@ function AdminPanel({ questions, onAddQuestion }) {
diff --git a/src/pages/Login.js b/src/pages/Login.js
index 34acab2..d9ca0a3 100644
--- a/src/pages/Login.js
+++ b/src/pages/Login.js
@@ -1,29 +1,51 @@
import React, { useState } from 'react';
+import axios from 'axios';
-function Login({ onLogin, onGoogleLogin, user, redirectToAdmin }) {
- const [username, setUsername] = useState(user?.username || '');
+function Login({ onLogin, user, redirectToAdmin }) {
+ const [tab, setTab] = useState('login');
+ const [username, setUsername] = useState('');
const [password, setPassword] = useState('');
- const [role, setRole] = useState(user?.role || 'student');
+ const [role, setRole] = useState('student');
const [message, setMessage] = useState('');
+ const [isError, setIsError] = useState(false);
+ const [loading, setLoading] = useState(false);
- const handleSubmit = (e) => {
+ const reset = () => {
+ setUsername('');
+ setPassword('');
+ setRole('student');
+ setMessage('');
+ setIsError(false);
+ };
+
+ const handleSubmit = async (e) => {
e.preventDefault();
if (!username.trim() || !password.trim()) {
- setMessage('Unesite korisničko ime i lozinku (prijava je opciona).');
+ setIsError(true);
+ setMessage('Unesite korisničko ime i lozinku.');
return;
}
- onLogin({ username: username.trim(), method: 'password', role }, redirectToAdmin && role === 'admin' ? 'admin' : 'home');
- setPassword('');
- setMessage('Uspešno ste prijavljeni!');
- };
-
- const handleGoogle = () => {
- if (!username.trim()) {
- onGoogleLogin('Google korisnik', redirectToAdmin ? 'admin' : 'home');
- } else {
- onGoogleLogin(username.trim(), redirectToAdmin ? 'admin' : 'home');
+ setLoading(true);
+ setMessage('');
+ setIsError(false);
+ try {
+ const endpoint = tab === 'register' ? '/api/auth/register' : '/api/auth/login';
+ const payload = tab === 'register'
+ ? { username: username.trim(), password, role }
+ : { username: username.trim(), password };
+ const { data } = await axios.post(endpoint, payload);
+ localStorage.setItem('token', data.token);
+ setIsError(false);
+ setMessage(tab === 'register' ? 'Nalog je kreiran! Dobrodošli!' : 'Uspešno ste prijavljeni!');
+ const nextPage = redirectToAdmin && data.user.role === 'admin' ? 'admin' : 'home';
+ onLogin({ username: data.user.username, method: 'password', role: data.user.role }, nextPage);
+ setPassword('');
+ } catch (err) {
+ setIsError(true);
+ setMessage(err.response?.data?.error || 'Greška pri komunikaciji sa serverom.');
+ } finally {
+ setLoading(false);
}
- setMessage('Google prijava aktivirana (primer bez stvarne autorizacije).');
};
return (
@@ -31,11 +53,33 @@ function Login({ onLogin, onGoogleLogin, user, redirectToAdmin }) {
-
Prijava (opciono)
-
Izaberite način prijave
-
Možete koristiti korisničko ime i lozinku ili se prijaviti preko Google naloga.
+
{tab === 'login' ? 'Prijava' : 'Registracija'}
+
{tab === 'login' ? 'Prijavite se' : 'Kreirajte nalog'}
+
+ {tab === 'login'
+ ? 'Unesite korisničko ime i lozinku da biste se prijavili.'
+ : 'Unesite podatke za kreiranje novog naloga.'}
+
- {message &&
{message}}
+ {message && (
+
{message}
+ )}
+
+
+
+
-
- Ili
-
-
- Prijava nije obavezna za korišćenje platforme, ali omogućava pristup administraciji i personalizaciji.
+ Prijava omogućava pristup administraciji i personalizaciji sadržaja.