Loading frontend/src/api/userApi.ts +3 −5 Original line number Diff line number Diff line Loading @@ -52,11 +52,9 @@ async function deleteSingle(id: string) { async function verifyUser(email: string, password: string) { return BaseApi.post(`${USER_PREFIX}/verify`, { params: { email: email, password: password }} ) }); } const UserApi = { Loading frontend/src/pages/LoginPage/LoginPage.tsx +24 −12 Original line number Diff line number Diff line import {Button, Flex, Form, FormProps, Input} from "antd"; import {Button, Flex, Form, FormProps, Input, Modal} from "antd"; import './login_page.css'; import {UserContext, UserContextType} from '../../contexts/UserContext.tsx'; import {useContext} from "react"; import LogoutPanel from "../../components/LogoutPanel/LogoutPanel.tsx"; import {useNavigate} from "react-router-dom"; import userApi from "../../api/userApi.ts"; import {User} from "../../models/user.ts"; type FieldType = { email?: string; Loading @@ -16,11 +15,11 @@ export default function LoginPage() { const {user, setUser} = useContext<UserContextType>(UserContext); const navigate = useNavigate(); const verifyUser = (email: string, password: string) => { userApi.verifyUser(email, password) .then(function (res){ const verifyUser = async (email: string, password: string): Promise<boolean> => { return userApi.verifyUser(email, password) .then((res) => { if (res.status === 200) { userApi.getSingleByEmail(email) return userApi.getSingleByEmail(email) .then(function (resIn){ const loggedUser = { id: resIn.id, Loading @@ -28,23 +27,36 @@ export default function LoginPage() { email: resIn.email } setUser(loggedUser) return true; }) .catch(function (err){ console.log(err); return false; }) } else { console.log(res.statusText); } return false; }) .catch(function(err) { console.log(err); return false; }) } const onFinish: FormProps<FieldType>['onFinish'] = (values) => { verifyUser(values.email!, values.password!) if (user?.email === values.email!){ verifyUser(values.email!, values.password!).then( (v) => { if (v) { navigate("/home"); Modal.success({ title: 'Login successfully', content: "User logged in successfully!", }); } else { Modal.error({ title: 'Login failed', content: "User was not logged in!", }); } } ) }; const onFinishFailed: FormProps<FieldType>['onFinishFailed'] = (errorInfo) => { Loading frontend/src/pages/RegisterPage/RegisterPage.tsx +20 −6 Original line number Diff line number Diff line import {Button, Form, FormProps, Input} from "antd"; import {Button, Form, FormProps, Input, Modal} from "antd"; import {useNavigate} from "react-router-dom"; import "./register_page.css" import userApi from "../../api/userApi.ts"; Loading @@ -13,24 +13,38 @@ type FieldType = { export default function RegisterPage() { const navigate = useNavigate(); const error = (message: string) => { Modal.error({ title: 'Register failed', content: message, }); }; const onFinish: FormProps<FieldType>['onFinish'] = (values) => { if (values.password == values.confPassword) { const req: CreateUser = {name: values.username!, email: values.email!, password: values.password!} userApi.createSingle(req) .then(function (res){ if (res.email === values.email!){ if (res.email != undefined){ console.log("Successfully logged in"); navigate('/login'); Modal.success({ title: 'Register succeeded', content: "Account created", }); } else { error(`User with email "${values.email}" or name "${values.username}" already exists`) } }) .catch(function (err) { // Zod validation failed or duplicate email error(err.response.data.message); console.log(err); }) } else { error("Passwords do not match"); console.log("Passwords not the same") } navigate('/login'); }; const onFinishFailed: FormProps<FieldType>['onFinishFailed'] = (errorInfo) => { Loading Loading @@ -58,7 +72,7 @@ export default function RegisterPage() { <Form.Item<FieldType> label="Email" name="email" rules={[{ required: true, message: 'Please input your email!' }]} rules={[{type:"email", required: true, message: 'Please input your email!' }]} > <Input /> </Form.Item> Loading @@ -66,7 +80,7 @@ export default function RegisterPage() { <Form.Item<FieldType> label="Password" name="password" rules={[{ required: true, message: 'Please input your password!' }]} rules={[{min: 10, required: true, message: 'Password is too short' }]} > <Input.Password /> </Form.Item> Loading @@ -74,7 +88,7 @@ export default function RegisterPage() { <Form.Item<FieldType> label="Confirm password" name="confPassword" rules={[{ required: true, message: 'Please repeat your password!' }]} rules={[{min: 10, required: true, message: 'Password is too short' }]} > <Input.Password /> </Form.Item> Loading Loading
frontend/src/api/userApi.ts +3 −5 Original line number Diff line number Diff line Loading @@ -52,11 +52,9 @@ async function deleteSingle(id: string) { async function verifyUser(email: string, password: string) { return BaseApi.post(`${USER_PREFIX}/verify`, { params: { email: email, password: password }} ) }); } const UserApi = { Loading
frontend/src/pages/LoginPage/LoginPage.tsx +24 −12 Original line number Diff line number Diff line import {Button, Flex, Form, FormProps, Input} from "antd"; import {Button, Flex, Form, FormProps, Input, Modal} from "antd"; import './login_page.css'; import {UserContext, UserContextType} from '../../contexts/UserContext.tsx'; import {useContext} from "react"; import LogoutPanel from "../../components/LogoutPanel/LogoutPanel.tsx"; import {useNavigate} from "react-router-dom"; import userApi from "../../api/userApi.ts"; import {User} from "../../models/user.ts"; type FieldType = { email?: string; Loading @@ -16,11 +15,11 @@ export default function LoginPage() { const {user, setUser} = useContext<UserContextType>(UserContext); const navigate = useNavigate(); const verifyUser = (email: string, password: string) => { userApi.verifyUser(email, password) .then(function (res){ const verifyUser = async (email: string, password: string): Promise<boolean> => { return userApi.verifyUser(email, password) .then((res) => { if (res.status === 200) { userApi.getSingleByEmail(email) return userApi.getSingleByEmail(email) .then(function (resIn){ const loggedUser = { id: resIn.id, Loading @@ -28,23 +27,36 @@ export default function LoginPage() { email: resIn.email } setUser(loggedUser) return true; }) .catch(function (err){ console.log(err); return false; }) } else { console.log(res.statusText); } return false; }) .catch(function(err) { console.log(err); return false; }) } const onFinish: FormProps<FieldType>['onFinish'] = (values) => { verifyUser(values.email!, values.password!) if (user?.email === values.email!){ verifyUser(values.email!, values.password!).then( (v) => { if (v) { navigate("/home"); Modal.success({ title: 'Login successfully', content: "User logged in successfully!", }); } else { Modal.error({ title: 'Login failed', content: "User was not logged in!", }); } } ) }; const onFinishFailed: FormProps<FieldType>['onFinishFailed'] = (errorInfo) => { Loading
frontend/src/pages/RegisterPage/RegisterPage.tsx +20 −6 Original line number Diff line number Diff line import {Button, Form, FormProps, Input} from "antd"; import {Button, Form, FormProps, Input, Modal} from "antd"; import {useNavigate} from "react-router-dom"; import "./register_page.css" import userApi from "../../api/userApi.ts"; Loading @@ -13,24 +13,38 @@ type FieldType = { export default function RegisterPage() { const navigate = useNavigate(); const error = (message: string) => { Modal.error({ title: 'Register failed', content: message, }); }; const onFinish: FormProps<FieldType>['onFinish'] = (values) => { if (values.password == values.confPassword) { const req: CreateUser = {name: values.username!, email: values.email!, password: values.password!} userApi.createSingle(req) .then(function (res){ if (res.email === values.email!){ if (res.email != undefined){ console.log("Successfully logged in"); navigate('/login'); Modal.success({ title: 'Register succeeded', content: "Account created", }); } else { error(`User with email "${values.email}" or name "${values.username}" already exists`) } }) .catch(function (err) { // Zod validation failed or duplicate email error(err.response.data.message); console.log(err); }) } else { error("Passwords do not match"); console.log("Passwords not the same") } navigate('/login'); }; const onFinishFailed: FormProps<FieldType>['onFinishFailed'] = (errorInfo) => { Loading Loading @@ -58,7 +72,7 @@ export default function RegisterPage() { <Form.Item<FieldType> label="Email" name="email" rules={[{ required: true, message: 'Please input your email!' }]} rules={[{type:"email", required: true, message: 'Please input your email!' }]} > <Input /> </Form.Item> Loading @@ -66,7 +80,7 @@ export default function RegisterPage() { <Form.Item<FieldType> label="Password" name="password" rules={[{ required: true, message: 'Please input your password!' }]} rules={[{min: 10, required: true, message: 'Password is too short' }]} > <Input.Password /> </Form.Item> Loading @@ -74,7 +88,7 @@ export default function RegisterPage() { <Form.Item<FieldType> label="Confirm password" name="confPassword" rules={[{ required: true, message: 'Please repeat your password!' }]} rules={[{min: 10, required: true, message: 'Password is too short' }]} > <Input.Password /> </Form.Item> Loading