mirror of
https://github.com/harivansh-afk/Saas-Teamspace.git
synced 2026-04-15 04:03:31 +00:00
42 lines
1.4 KiB
TypeScript
42 lines
1.4 KiB
TypeScript
import bcrypt from 'bcryptjs'
|
|
import type { NextAuthConfig } from 'next-auth'
|
|
import Credentials from 'next-auth/providers/credentials'
|
|
|
|
import Github from 'next-auth/providers/github'
|
|
import Google from 'next-auth/providers/google'
|
|
import { LoginSchema } from '@/schemas'
|
|
import { getUserByEmail } from '@/data/user'
|
|
|
|
export default {
|
|
providers: [
|
|
// OAuth authentication providers... the raw data is found at /api/auth/providers
|
|
Github({
|
|
clientId: process.env.GITHUB_CLIENT_ID,
|
|
clientSecret: process.env.GITHUB_CLIENT_SECRET
|
|
}),
|
|
Google({
|
|
clientId: process.env.GOOGLE_CLIENT_ID,
|
|
clientSecret: process.env.GOOGLE_CLIENT_SECRET
|
|
}),
|
|
|
|
Credentials({
|
|
async authorize(credentials) {
|
|
const validatedFields = await LoginSchema.safeParse(credentials)
|
|
|
|
if (validatedFields.success) {
|
|
const { email, password } = validatedFields.data
|
|
|
|
const user = await getUserByEmail(email)
|
|
// by no password I mean that the user is using a social login (Google, Github, etc.)
|
|
if (!user || !user.password) return null
|
|
|
|
// check if passwords match
|
|
const passwordsMatch = await bcrypt.compare(password, user.password)
|
|
// if the passwords match, return the user
|
|
if (passwordsMatch) return user
|
|
}
|
|
return null
|
|
}
|
|
})
|
|
]
|
|
} satisfies NextAuthConfig
|