hts/apps/migrant/auth.ts

100 lines
2.4 KiB
TypeScript

import NextAuth, { DefaultSession } from 'next-auth'
import GitHub from 'next-auth/providers/github'
import Google from 'next-auth/providers/google'
import { storeUser } from '@/app/actions'
import Credentials from 'next-auth/providers/credentials'
import { authConfig } from './auth.config'
import { z } from 'zod'
import { getStringFromBuffer } from './lib/utils'
import { getUser } from './app/xauth/login/actions'
// override type definitions for session
// declare module 'next-auth' {
// interface Session {
// user: {
// id?: string | null | undefined
// } & DefaultSession['user']
// }
// }
export const { auth, handlers: { GET, POST }, 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
}
})
]
})
// export const {
// handlers: { GET, POST },
// auth
// } = NextAuth({
// providers: [
// // GitHub,
// Google,
// ],
// callbacks: {
// async jwt({ token, profile }) {
// if (profile?.id) {
// token.id = String(profile.id)
// const user = {
// ...token,
// ...profile,
// id: String(profile.id)
// }
// await storeUser(user)
// }
// return token
// },
// async session({ session, token }) {
// if (token?.id) {
// session.user.id = String(token.id)
// }
// return session
// }
// // uncomment to require authentication
// // authorized({ auth }) {
// // return !!auth?.user
// // }
// },
// pages: {
// signIn: '/sign-in'
// }
// })