티스토리 뷰
처음 로그인 페이지 기획 시 로그인 단계는 총 3단계로 구현하기로 기획하였습니다.(next.js 사용)
DB > supabase
auth > nextAuth
모달 > paraller, InterCepting Routes
1단계 모달 : 선생님 또는 수강생선택
2단계 모달 : 선생님 선택 시 2단계 모달로 이동되며 직업, 분야를 추가로 받기
3단계 모달 : 실제 회원가입 창 (이메일, 소셜로그인)
구현 방법
1. zustand를 이용해 각각의 단계(1단계 2단계)에서 받은 내용을 스토어를 이용해 저장
2. 3단계에서 소셜 회원가입 버튼을 누르면 각각의 소셜에서 주는 유저의 정보를 담아 스토어에 저장
3. 유효성을 이용해 3개의 단계에서 받은 데이터가 잘 들어왔는 지 확인 후 수퍼베이스에 전송
🚨문제발생
위 기획 단계를 모두 구현 후 zustand에 실제 값이 잘 들어왔는지 확인해 보았으나 ,
로그인 후 유저의 정보만 담겨있는 것을 확인.
🛠️문제해결 과정
✅ 초기 1,2 단계 값이 잘 담기는지 확인
✅ 소셜 회원가입 후 값이 잘 담기는지 확인
✅ 소셜 로그인 시 스토어에 모든 값이 잘 담겨 있는지 확인
🔥찾아낸 문제점.
- 1,2 단계에서 값이 잘 담기는 것을 확인하였으나 문제는 소셜 회원가입 시 화면이 리렌더링 되어 스토어에서 담고 있던 값들이 모두 초기화 되는 문제점
- 소셜 회원가입은 회원가입과 로그인을 동시에 처리. 리렌더링이 일어날 수 밖에 없는 환경
회원가입 후 로그인이 동시에 처리되기 때문에 화면이 리렌더링 될 수 밖에 없음
즉, 로그인 후 소셜 회원가입 전 1,2 단계 값은 초기화되고, 리렌더링 이후 유저의 정보만 남아있음.
☀️해결 방법 모색
1. zustand persist 사용하기
2. 회원가입 기획 다시하기 (회원가입 후 별도의 페이지에서 추가 (직업, 비즈니스 분야) 정보 받기)
❓zustand persist 사용하기
스토어의 상태를 로컬스토리지나 세션스토리지와 같은 영구 저장소에 값을 저장하고 있다가
슈퍼베이스에 전송을 하는 방법이다.
⚠️해당 방법을 채택하는 경우
1. 처음 사용자의 정보가 없는 상태에서 사용자의 정보를 zustand persist(직업, 비즈니스 분야) 이용해 저장
2. 소셜로그인이 되면 세션으로 받은 사용자의 정보를 상태값에서 따로 저장
(NextAuth를 사용하여 서버 컴포넌트에서 작업이 이루어지고 있었기 때문에 세션에 저장된 값을 불러와 상태값을 따로 저장 불가.
사용자가 로그인 후 클라이언트 컴포넌트에서 세션을 통해 들어온 값을 불러 zustand에 저장하는 과정 필요)
3. 2번 단계에서 받은 값을 zustand에 추가로 저장
4. 이후 zustand persist에 저장된 값을 supabase에 전달.
5. 회원가입 완료 후에 선생님 정보로 필요한 추가 데이터를 따로 입력 필요(계좌번호, 등)
*5단계가 필요했던 이유: 회원가입을 최대한 간단하게 하기위해 최소한의 선생님 데이터를 받기로하여 추가정보를 더 받아야 함*
❓회원가입 기획 다시하기
소셜로그인 후 사용자의 정보를 가지고 그 사용자의 정보를 추가로 받는 방법
⚠️해당 방법을 채택하는 경우
1. zustand persist를 사용하지 않아도 되기 때문에 보안 강화
2. 코드 간편화
💡결론
채택은 회원가입 기획 다시하기
작성해둔 코드가 너무 깝고 속상하지만 페러렐라우터와 인터셉터를 배웠다는 것으로 만족하기로 하였습니다.
과연 다른 방법도 있는지 알아보고 싶으나 더 이상의 시간 소요는 할 수 없다고 판단이 되었고,
소셜 로그인(학생으로 회원가입) > 마이페이지에서 강사로 전환 후 추가 데이터 받는 것으로 수정하였습니다.
프로젝트 기간이 끝나고 회원가입 전 사용자의 정보를 받기 위한 좋은 방법이 있는지 모색해볼 예정
:: 이는 하드코딩을 하지 않고서는 어렵다는 판단.
'Error' 카테고리의 다른 글
Next.Js Hydration failed Error (0) | 2024.05.19 |
---|---|
build error 발생 및 해결과정 (트러블 슈팅 2) (1) | 2024.05.08 |
TypeError: _api_axiosInstance_WEBPACK_IMPORTED_MODULE_11__ (0) | 2024.02.20 |
Uncaught TypeError: Cannot read properties of null (reading 'useContext') (0) | 2024.02.13 |
Uncaught runtime errors: Cannot read properties of undefined (reading 'map') (0) | 2024.02.03 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Warning: validateDOMNesting(...): <li> cannot appear as a descendant of <li>
- Fetch와 Axios 의 장단점
- 유효성검사 css
- Warning: Each child in a list should have a unique "key" prop.
- readme 이미지 추가 방법
- readme 작성 방법
- Warning: A component is changing an uncontrolled input to be controlled.
- styled component 사용방법
- axios instance 작성하기
- 별점만들기
- nextjs 토큰 만료처리하기
- axios 설치하기
- readme 역할
- axiosinstance 사용 시 토큰 사용 법
- 에러모음집
- styled component 설치방법
- styled component GlobalStyle 사용방법
- simple Icon 사용방법
- 별점 색채우기
- 영화 별점
- git cache
- axios 사용하기
- styled component 조건부 사용방법
- readme 작성해야 하는 이유
- axios CRUD
- 유효성검사
- readme작성해보기
- 영화별점만들기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함