From 3542db2d5d28b75767a4a670c1e9f47db7a90881 Mon Sep 17 00:00:00 2001 From: Cllaude99 Date: Mon, 10 Jun 2024 22:35:04 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20#14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/login.ts | 12 ++++++ src/components/login.tsx | 82 ++++++++++++++++++++++++++++++++++++- src/pages/location-each.tsx | 6 +-- 3 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 src/apis/login.ts diff --git a/src/apis/login.ts b/src/apis/login.ts new file mode 100644 index 0000000..c879e9a --- /dev/null +++ b/src/apis/login.ts @@ -0,0 +1,12 @@ +import axios from 'axios'; + +interface ILoginPayload { + readonly roomId: string; + readonly id: string; + readonly pw: string; +} + +// 유저 로그인을 위한 함수 +export const fetchLogin = async (loginPayload: ILoginPayload) => { + return axios.post('/api/auth/login', loginPayload); +}; diff --git a/src/components/login.tsx b/src/components/login.tsx index cfe85b4..a07359d 100644 --- a/src/components/login.tsx +++ b/src/components/login.tsx @@ -1,3 +1,83 @@ +import { useForm } from 'react-hook-form'; +import { useNavigate, useParams } from 'react-router-dom'; +import Button from './button'; +import { useState } from 'react'; +import { useSetAtom } from 'jotai'; +import { loginAtom } from '@/stores/login-state'; +import { useMutation } from '@tanstack/react-query'; +import { fetchLogin } from '@/apis/login'; + +interface IForm { + id: string; + pw: string; +} + export default function Login() { - return

로그인

; + const { roomId } = useParams<{ roomId: string }>(); + const [formLoading, setFormLoading] = useState(false); + const navigate = useNavigate(); + const setLoginState = useSetAtom(loginAtom); + const { register, handleSubmit } = useForm(); + + // 사용자 로그인을 위한 과정 + const { mutate: userLogin } = useMutation({ + mutationFn: fetchLogin, + onSuccess: (data: any) => { + localStorage.setItem('accessToken', data.accessToken); + localStorage.setItem('refreshToken', data.refreshToken); + setLoginState(true); + navigate(`/enter-location/${roomId}`); + }, + onError: (error) => { + console.log('로그인 과정 에러', error); + }, + }); + + const onSubmit = (data: IForm) => { + setFormLoading(true); + + const { id, pw } = data; + if (roomId === undefined) { + alert('login.tsx roomId오류!'); + setFormLoading(false); + return; + } + + const payload = { + roomId, + id, + pw, + }; + + // 유저 로그인 요청 + userLogin(payload); + + setFormLoading(false); + }; + + return ( + <> +
+
+
+ 아이디 + + 비밀번호 + +
+
+
+