---
type: video
videoId: vo2uq1cJV6w
title: "Next Auth and Prisma"
date: "2022-11-10T13:00:01Z"
slug: "next-auth-and-prisma"
image:
name: "next_auth_2.png"
alt: "Next Auth and Prisma"
width: 1280
height: 720
status: 'published'
description: "Learn how to store your next auth user's details in a database using prisma"
tags: ['JavaScript', 'js', 'next.js', 'nextjs', 'next', 'database', 'relational database', 'orm']
previousPostSlug: 'prisma-and-nextjs-video'
nextPostSlug: 'the-easiest-way-to-add-auth-to-a-next-app'
---
Learn how to store your next auth user's details in a database using prisma. This is the second of two videos so make sure you check out the first one if you haven't already.
## Code Examples
https://github.com/Sam-Meech-Ward/code_snippets_prisma_next_demo/tree/auth
```jsx
// /pages/api/auth/[...nextauth].js
import NextAuth from "next-auth"
import GithubProvider from "next-auth/providers/github"
import { PrismaAdapter } from "@next-auth/prisma-adapter"
import { prisma } from "../../../server/db/client"
export const authOptions = {
// Configure one or more authentication providers
adapter: PrismaAdapter(prisma),
providers: [
GithubProvider({
clientId: process.env.GITHUB_ID,
clientSecret: process.env.GITHUB_SECRET,
}),
// ...add more providers here
],
}
export default NextAuth(authOptions)
```
```jsx
import '../styles/globals.css'
import 'highlight.js/styles/stackoverflow-dark.css'
import SiteNavigation from "../components/SiteNavigation"
import { SessionProvider } from "next-auth/react"
import TimeAgo from 'javascript-time-ago'
import en from 'javascript-time-ago/locale/en'
TimeAgo.setDefaultLocale(en.locale)
TimeAgo.addLocale(en)
function MyApp({ Component, pageProps: { session, ...pageProps }, }) {
return (
<>
>
)
}
export default MyApp
```
```jsx
// /pages/api/posts.js
import { prisma } from '../../server/db/client'
import { getServerSession } from "next-auth/next"
import { authOptions } from "./auth/[...nextauth]"
function titleFromCode(code) {
return code.trim().split('\n')[0].replace('// ', '')
}
async function post(req, res) {
const session = await getServerSession(req, res, authOptions)
if (!session) {
res.status(401).json({ error: 'Unauthorized' })
return
}
const prismaUser = await prisma.user.findUnique({
where: { email: session.user.email },
})
if (!prismaUser) {
res.status(401).json({ error: 'Unauthorized' })
return
}
const { language, code } = req.body
const title = titleFromCode(code)
const post = await prisma.post.create({
data: {
title,
language,
code,
userId: prismaUser.id,
},
})
res.status(201).json(post)
}
export default async function handler(req, res) {
const { method } = req
switch (method) {
case 'POST':
post(req, res)
break
default:
res.setHeader('Allow', ['POST'])
res.status(405).end(`Method ${method} Not Allowed`)
}
}
```
```prisma
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id String @id @default(cuid())
name String?
email String? @unique
emailVerified DateTime?
image String?
accounts Account[]
sessions Session[]
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
code String @db.Text
language String
totalLikes Int @default(0)
totalComments Int @default(0)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
userId String
user User @relation(fields: [userId], references: [id])
}
model Account {
id String @id @default(cuid())
userId String
type String
provider String
providerAccountId String
refresh_token String? @db.Text
access_token String? @db.Text
expires_at Int?
token_type String?
scope String?
id_token String? @db.Text
session_state String?
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@unique([provider, providerAccountId])
}
model Session {
id String @id @default(cuid())
sessionToken String @unique
userId String
expires DateTime
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
model VerificationToken {
identifier String
token String @unique
expires DateTime
@@unique([identifier, token])
}
```