Auth.js(NextAuth.js)で不要なprofileのデータ項目をDBに保存しないようにする

Auth.jsをデータベースで利用するのは非常に簡単で、Auth.jsが推奨するスキーマさえ用意すればログイン時にAdapterにより自動でデータがテーブルへ保存します。

このときデフォルトで保存されるデータ項目(Userテーブルのカラム)は以下です。

  • User

    • name

    • email

    • emailVerified

    • image

この中に不要なデータ項目が存在する場合、セキュリティの観点から保存対象外としたほうが良さそうです。

Auth.jsではauthOptionsにオプションを足すことで保存するデータ項目が選べるので、その設定方法を紹介します。

設定方法

ここでは例としてGoogleProviderとPrismaを使用するコードを元に、「name」というデータ項目を保存対象外とします。

[...nextauth].ts

export const authOptions = {
  adapter: PrismaAdapter(prisma),

  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET,
      profile(profile) {
        // ここで必要な情報だけ返す
        return {
          id: profile.sub,
          //name: profile.name
          email: profile.email,
          emailVerified: profile.email_verified,
          image: profile.picture,
        }
      },
    }),
  ],
}

公式のサンプルにもコメントがありますがidは必須のようです。
(ちなみにここで設定したidはAccountテーブルのproviderAccountIdに設定されます。)

// Return all the profile information you need.
// The only truly required field is `id`
// to be able identify the account when added to a database

Overview | Auth.js - Override default provider config

schema.prisma

[...nextauth].tsで保存対象外にしたデータ項目はDBのスキーマ定義から削除して大丈夫です。

model User {
  id            String    @id @default(cuid())
  //name          String?
  email         String?   @unique
  emailVerified DateTime?
  image         String?
  accounts      Account[]
  sessions      Session[]
}

この記事が気に入ったらサポートをしてみませんか?