Files
pawol.nu/pages/api/auth/[...nextauth].js
T

67 lines
1.8 KiB
JavaScript
Raw Normal View History

2021-05-22 23:36:39 +02:00
import NextAuth from 'next-auth'
import Providers from 'next-auth/providers'
import axios from 'axios'
const options = {
providers: [
Providers.Credentials({
name: 'Credentials',
credentials: {
username: {label: 'Email', type: 'email', placeholder: 'email@exemple.net'},
password: {label: 'Password', type: 'password'}
},
authorize: async credentials => {
try {
const user = await axios.post(`${process.env.NEXT_PUBLIC_API_URL}/auth/local`, {
identifier: credentials.username,
password: credentials.password
})
if (user.data) {
return user.data
}
return null
} catch (error) {
const errorMessage = error.response.data.message[0].messages[0].message
throw new Error(errorMessage)
}
}
2021-06-10 19:22:46 +02:00
}),
Providers.Google({
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET
2021-05-22 23:36:39 +02:00
})
],
database: process.env.NEXT_PUBLIC_DATABASE_URL,
session: {
jwt: true
},
callbacks: {
2021-06-10 19:22:46 +02:00
jwt: async (token, user, account) => {
2021-05-22 23:36:39 +02:00
if (user) {
2021-06-10 19:22:46 +02:00
const response = await fetch(
`${process.env.NEXT_PUBLIC_API_URL}/auth/${account.provider}/callback?access_token=${account?.accessToken}`
)
const data = await response.json()
token.id = data.id || user.id
token.jwt = data.jwt || user.jwt
token.user = data.user || user.user
2021-05-22 23:36:39 +02:00
}
return Promise.resolve(token)
},
session: async (session, token) => {
session.jwt = token.jwt
session.user = token.user
return Promise.resolve(session)
}
},
pages: {
signIn: '/soumet',
error: '/soumet'
2021-05-22 23:36:39 +02:00
}
}
const Auth = (request, response) =>
NextAuth(request, response, options)
export default Auth