import CredentialsProvider from 'next-auth/providers/credentials' import {readMe, withToken} from '@directus/sdk' import {directusClient} from '@/lib/directus.js' const apiUrl = process.env.DIRECTUS_API_URL const nextauthSecret = process.env.NEXTAUTH_SECRET export const options = { providers: [ CredentialsProvider({ // eslint-disable-line new-cap name: 'Credentials', credentials: { email: {}, password: {} }, async authorize(credentials) { const res = await fetch(`${apiUrl}/auth/login`, { method: 'POST', body: JSON.stringify(credentials), headers: {'Content-Type': 'application/json'} }) const user = await res.json() if (res.ok && user) { return user } return null } }) ], trustHost: true, secret: nextauthSecret, pages: { signIn: '/login' }, callbacks: { async jwt({ token, user, account }) { if (account && user) { const userData = await directusClient.request( withToken( user.data.access_token, readMe({ fields: ['*'] }) ) ) return { ...token, accessToken: user.data.access_token, refreshToken: user.data.refresh_token, user: userData } } return token }, async session({session, token}) { session.user.userId = token.user.id session.user.username = token.user.first_name session.user.accessToken = token.accessToken session.user.refreshToken = token.refreshToken session.user.token = token.user.token session.user.email = token.user.email session.user.password = token.user.password return session } } }