📖
Next.js+NextAuthでログイン済み時だけ参照できる機能を作る
前回はDBでセッションを保持しました。今回はアクセス毎にセッションを確認して、ログインしていたら利用できる機能を作ります。
NextAuthではサーバサイドでsessionを確認する手段がなさそうでした。
以下などはサーバーサイドで使えそうだったが現行バージョンだと廃止された?
どのユーザーからのアクセスか?特定する必要があり
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