chatbot-template/auth.ts

46 lines
1.2 KiB
TypeScript
Raw Normal View History

2024-03-14 20:00:52 +03:00
import NextAuth from 'next-auth'
import Credentials from 'next-auth/providers/credentials'
import { authConfig } from './auth.config'
import { z } from 'zod'
import { getStringFromBuffer } from './lib/utils'
2024-03-19 04:37:30 +03:00
import { getUser } from './app/login/actions'
2023-06-22 11:02:20 -07:00
2024-03-14 20:00:52 +03:00
export const { auth, signIn, signOut } = NextAuth({
...authConfig,
providers: [
Credentials({
async authorize(credentials) {
const parsedCredentials = z
.object({
email: z.string().email(),
password: z.string().min(6)
})
.safeParse(credentials)
if (parsedCredentials.success) {
const { email, password } = parsedCredentials.data
const user = await getUser(email)
if (!user) return null
const encoder = new TextEncoder()
const saltedPassword = encoder.encode(password + user.salt)
const hashedPasswordBuffer = await crypto.subtle.digest(
'SHA-256',
saltedPassword
)
const hashedPassword = getStringFromBuffer(hashedPasswordBuffer)
if (hashedPassword === user.password) {
return user
} else {
return null
}
}
return null
2023-11-26 18:30:48 -06:00
}
2024-03-14 20:00:52 +03:00
})
]
2023-11-26 18:30:48 -06:00
})