본문 바로가기
WebDev/항해99

실전프로젝트 로그인 로직

by S.AHA_dev 2023. 9. 1.
728x90
반응형

리덕스 툴킷을 사용하여 전역으로 관리

슬라이스 생성해서 로그인유저 리듀서 만들기

const userSlice = createSlice({
  name: 'user',
  initialState,
  reducers: {
    LOGIN_USER: (state: UserState, action) => {
      state.user.email = action.payload.email;
      state.user.nickName = action.payload.nickname;
      state.user.userImage = action.payload.userImage;
      state.user.preset = action.payload.preset;
      localStorage.setItem(LocalStorageKey.Token, action.payload.token);
    },

유저 api 매개변수로 유저정보를 받고 보내준 후 받은 데이터 익스포트

const userLogin = async (loginUser: LoginUser): Promise<UserResponse> => {
  const response = await api.post(`/api/auth/login`, loginUser);
  return response.data;
};

리액트 쿼리를 사용하기 떄문에 뮤테이션훅으로 요청

성공적으로 받았을 때 디스패치로 전역적으로 로그인된 유저의 정보를 저장

이후 넥스트라우터로 메인페이지로 이동 

실패한다면 에러메시지를 담아서 에러메시지를 띄어주기 위한 스테이트로 저장 

 const signInMutation = useMutation(userLogin, {
    onSuccess: (data) => {
      dispatch(LOGIN_USER(data));
      router.push('/');
    },
    onError: (error: AxiosError) => {
      const message = error?.response?.data as string;
      if (message) {
        setServerError(message);
      } else {
        alert(
          '로그인에 실패하였습니다. 아이디 혹은 비밀번호를 다시 한번 확인해주세요'
        );
      }
    },
  });

로그인 버튼을 클릭했을 때 실행되는 함수로

유효성검사에 실패한 요소들은 에러객체에 담은 후
있다면 메시지를 스테이트에 담아서 출력 아니라면 

이메일과 비밀번호를 받아 뮤테이션 실행

 const handleLogin = (e: FormEvent) => {
    e.preventDefault();
    let errors: ErrorMessage = {};

    if (!validateEmail(signInState.email)) {
      if (!validatePassword(signInState.password)) {
        errors.message = '아이디와 비밀번호를 다시 확인해주세요';
      }
    }

    if (Object.keys(errors).length > 0) {
      setError(errors);
      return;
    } else {
      setError({ message: '' });
    }
    const sendData = {
      email: signInState.email,
      password: signInState.password,
    };
    signInMutation.mutate(sendData);
  };

 

 

이제 실전프로젝트도 마무리단계로 되어가고 있고 정리 차 했던페이지들을 업로드 할 예정입니당!
모두 파이팅 ㅠㅠ!!!

반응형

'WebDev > 항해99' 카테고리의 다른 글

실전프로젝트 세팅컴포넌트  (0) 2023.09.04
실전프로젝트 회원가입 로직  (0) 2023.09.02
실전프로젝트 피드 로직  (0) 2023.08.31
실전프로젝트 인피니티 스크롤  (0) 2023.08.29
실전프로젝트 TIL  (0) 2023.08.25