인프런 커뮤니티 질문&답변

꿈에그린그림님의 프로필 이미지

작성한 질문수

Next + React Query로 SNS 서비스 만들기

next-auth로 로그인하기

nextauth session type 질문드립니다.

24.03.06 19:36 작성

·

367

0

session 데이터를 제 프로젝트 상황에 맞게 바꿔서 만들어주고싶어 https://next-auth.js.org/getting-started/typescript
해당 문서를보고 타입을 만들어주었습니다,
declare module "next-auth" {
interface Session {
user: {

address: string
ids:string[]
}
}
}

그리고 callback 부분으로 넘어가
session 에서
session.user.Ids = token.ids;
return session;

이런식으로 셋팅해주는데요.

session.user.Ids = token.ids; 에서 타입에러가 발생되어
타입에 디폴트 세션을 넣어주니 에러는 사라졌으나 타입이 2개가 되어 user.이후에 값을 추론을 못하더라구요, 이번강의 영상을 보다보니 nextauth 에서 정해놓은 규칙이 있다하셧는데 혹시 세션 타입또한 디폴트세션을 사용안할수는 없는걸까요?

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2024. 03. 06. 19:47

session.user.Ids = token.ids;

에서 에러가 났다 하셨는데 무슨 에러였나요? Ids는 ids의 오타인거죠??

꿈에그린그림님의 프로필 이미지

2024. 03. 06. 21:52

네네
user: { /** The user's postal address. */ email: string; Ids: string[]; } & DefaultSession["user"]; }
이렇게 해주지 않고 아래처럼 사용하면

user: { email: string; Ids: string[]; } |

'{}' 형식에 'string[]' 형식의 length, pop, push, concat 외 35개 속성이 없습니다.
라는 타입에러가 발생합니다.


제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2024. 03. 07. 02:17

저는 에러가 안 나는데 혹시 next-auth/jwt 타이핑도 하신 건가요?

꿈에그린그림님의 프로필 이미지

2024. 03. 07. 08:57

Jwt 가 콜백부분 말하시는거면 넵 jwt session 다 있습니다

 

타입은 next.auth.d.ts에 공식문서대로 하엿습니다

꿈에그린그림님의 프로필 이미지

2024. 03. 07. 09:36

https://stackoverflow.com/questions/69602694/how-to-update-the-type-of-session-in-session-callback-in-next-auth-when-using-ty
딱 이런 상황인데 , 제가 지정해준 타입이 추론되지 않으며
'{}' 형식에 'string[]' 형식의 length, pop, push, concat 외 35개 속성이 없습니다.
콜백 세션에서세션에 추가해준 데이터에 이런 에러가 뜨는것입니다!

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2024. 03. 07. 13:36

callbacks: {
  jwt({ token}) {
    return token;
  },
  session({ session, newSession, user, token}) {
    session.user.address = token.ids;
    return session;
  }
},

이렇게 하고 타이핑을 아래처럼 했을 때 에러없이 잘 됩니다.

declare module "next-auth" {
  /**
   * Returned by `useSession`, `getSession` and received as a prop on the `SessionProvider` React Context
   */
  interface Session {
    user: {
      /** The user's postal address. */
      address: string[]
    }
  }
}

import { JWT } from "next-auth/jwt"

declare module "next-auth/jwt" {
  /** Returned by the `jwt` callback and `getToken`, when using JWT sessions */
  interface JWT {
    /** OpenID ID Token */
    ids: string[]
  }
}
제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2024. 03. 07. 13:36

declare module할 때 import 넣으셨나요?

꿈에그린그림님의 프로필 이미지

2024. 03. 07. 13:37

아..next-auth/jwt 에도 타이핑을 해주니 해결되었네요.. ㅜ
감사합니다..
근데 nextauth 에서 session 업데이트를 서버쪽에서 api 요청하여서 응답받은걸로 처리할수도 있을까요?
클라이언트에서 sessionUpdate 방법이아닌..

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2024. 03. 07. 13:48

세션 업데이트라는 게 세션 수정을 말씀하시는 건가요? 서버쪽에서는 /api/auth/session으로 요청보내야하는걸로 알고있습니다.