-
Notifications
You must be signed in to change notification settings - Fork 43
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[김찬기] Sprint9 #285
base: Next-김찬기
Are you sure you want to change the base?
The head ref may contain hidden characters: "Next-\uAE40\uCC2C\uAE30-sprint9"
[김찬기] Sprint9 #285
Conversation
- Link태그 변경 (react router에서 next link) - client 컴포넌트에 'use client' directive추가 - react router에서 next navigation으로 교체 - 페이지 라우팅 설정 - nextjs로 옮기면서 생기는 오류 수정 (로컬스토리지)
- mini, border 프롭 추가
- 다른컴포넌트에서 무한랜더링 유발 방지용으로 useCallback 적용
- 방향 추가 - 사이즈 추가 - 날짜를 공용 컴포넌트로 교체
- 베스트 게시물 (csr) - 전체 게시물 (ssr)
- 리프레시발급에 axios인스턴스 변경 (인터셉터 무한지옥에 빠짐) - client경우에는 context에서 인터셉터를 설정하나, ssr용으로 인터셉션 추가로 설정
- 세션체크는 미들웨어 - 소유자체크는 서버에서 세션체크
- 헤더 세션체크를 클라이언트 세션을 체크하도록 변경 (ssg 전략때문에)
- 중복되거나 비슷한 컴포넌트 리팩토링 - 쿼리파람을 미리 resolve해서 컴포넌트로 보내기 (두번의 await 방지) - 사용안하는 클라이언트 훅 삭제
- params를 미리 resolve해서 전달 - 에러 핸들링 추가 - 컴포넌트 이름 오타 수정
src/service/axios.ts
Outdated
import { auth } from "@/auth"; | ||
import axios from "axios"; | ||
|
||
export const axiosInstance = axios.create({ | ||
baseURL: process.env.NEXT_PUBLIC_API_URL, | ||
}); | ||
|
||
if (typeof window === "undefined") { | ||
axiosInstance.interceptors.request.use( | ||
async (config) => { | ||
const session = await auth(); | ||
if (session?.accessToken) { | ||
config.headers.Authorization = `Bearer ${session?.accessToken}`; | ||
} | ||
return config; | ||
}, | ||
(error) => { | ||
return Promise.reject(error); | ||
} | ||
); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
서버 런타임환경에서 데이터를 요청할때
서버에 세션이 있으면 헤더에 토큰을 넣어보내도록했습니다.
(중고마켓 게시물 상세페이지를 요청할때 토큰을 넣어보내면, 좋아요를 눌렀는지 판별해서 보내주는것 때문에 넣게 되었습니다.)
클라이언트 사이드에서 인터셉터는 프로젝트 루트쪽에 컴포넌트를 끼워두웠습니다. useEffect코드안에서 interceptor를 설정했습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
조금더 고민을 해보니까 "use server"를 이용해보면 좋을것 같아서,
앱시작점에서 "use server" 지시어를 달고 있는 인터셉터 함수파일을 실행하는 방향으로 바꾸었습니다.
if (accessToken !== data.accessToken) { | ||
// next-auth session update | ||
await update({ accessToken }); | ||
error.config.headers.Authorization = `Bearer ${accessToken}`; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
클라이언트 사이드에서 토큰 재발급후에, nextauth에게 어떻게 바뀐 토큰을 알려주는지 찾아보다가
update를 알게되어서 사용했습니다.
요구사항
기본
심화
주요 변경사항
스크린샷
멘토에게