💭

Auth.jsのsessionにパラメータを追加する

2024/11/24に公開

Auth.jsでログインした際にsessionで扱える値は、
デフォルトでは"email","name","image"の3つだけのようです。

ここに、追加で好きな値をカスタムするのに苦戦したのでやり方をメモします。

STEP.1型の拡張

appディテクトリの直下に"types"ディテクトリを作り
そこに"next-auth.d.ts"ファイルを作ります。
このファイルを以下のように編集する。

next-auth.d.ts:

import NextAuth from 'next-auth'
import { JWT } from 'next-auth/jwt'
 
 
declare module 'next-auth' {
  interface User {
    user_id: number
  }
}
 
declare module 'next-auth/jwt' {
  interface JWT {
    user_id: number
  }
}

auth.tsを下記のように編集

export const { handlers, signIn, signOut, auth } = NextAuth({
  providers: [
    Credentials({
      credentials: {
        email: {},
        password: {},
      },
      authorize: async (credentials) => {

        // 省略
      },
    }),
  ],

  //セッションで使えるユーザーのパラメーターを追加するカスタマイズ
  //next-auth.d.tsで追加のパラメーターの型を定義している
  callbacks: {
    async jwt({ token, user }) {
      // userが存在する場合、保存するJWTにcompanyIdを追加する
      if (user) {
        token.user_id = user.user_id
      }
      return token
    },
    async session({ session, token }) {
      session.user.user_id = token.user_id
      return session
    },
  },


})

これでパラメータを追加できるようになります。

Discussion