📖

Next.js+NextAuthでログイン済み時だけ参照できる機能を作る

2025/02/24に公開

前回はDBでセッションを保持しました。今回はアクセス毎にセッションを確認して、ログインしていたら利用できる機能を作ります。

NextAuthではサーバサイドでsessionを確認する手段がなさそうでした。
以下などはサーバーサイドで使えそうだったが現行バージョンだと廃止された?
https://next-auth.js.org/configuration/nextjs

どのユーザーからのアクセスか?特定する必要があり
Cookieでセッショントークンを授受しているようで使います。

CookieからSessionToken文字列を取得

GETリクエストで受け取ったCookieの中からauthjs.session-tokenの文字列を取得する。

const cookieStore = await cookies()
const theme = cookieStore.get('authjs.session-token')

sessionテーブルを参照する

Cookieの文字列が取れなかった、または、ログイン済みか?確認する

if (!theme) {
  return Response.json({ message: "Not authenticated" }, { status: 401 })
}
const sessionId = await prisma.session.findFirst({
  where: {
    sessionToken: theme.value
  },select: {
    userId: true
  }
})
if (!sessionId?.userId) {
  return Response.json({ message: "Not authenticated" }, { status: 401 })
}

このチェックを入れることでログイン済みかどうか判断できます。このチェックの後で動かしたいプログラムを実装します。userIdがユーザーを一意に特定する情報になるため、必要に応じて他のテーブルにも合わせて登録いたします。

Discussion