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に設定されます。)
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[]
}
この記事が気に入ったらサポートをしてみませんか?