Next-auth session not created using email verification

Viewed 2256

I'm creating a web app with nextjs next-auth and have a problem. When user clicks sign in button they are directed to the email form which is okay then when you enter email the email is sent successfully, but when you click sign in from the email you are redirected to the main page but still not signed in. IN the console i get this error:

[next-auth][error][session_error] 
https://next-auth.js.org/errors#session_error TypeError: Cannot read property 'name' of undefined
    at Object.session (/home/dennis/shopsms/node_modules/next-auth/dist/server/routes/session.js:87:24)
[next-auth][error][session_error] 
https://next-auth.js.org/errors#session_error TypeError: Cannot read property 'name' of undefined
    at Object.session (/home/dennis/shopsms/node_modules/next-auth/dist/server/routes/session.js:87:24)
[next-auth][error][session_error] 
https://next-auth.js.org/errors#session_error TypeError: Cannot read property 'name' of undefined
    at Object.session (/home/dennis/shopsms/node_modules/next-auth/dist/server/routes/session.js:87:24)

This is my nextauth.js

// pages/api/auth/[...nextauth].js
import NextAuth from 'next-auth';
import Providers from 'next-auth/providers'

const options = {
  site: process.env.NEXTAUTH_URL,
  providers: [
Providers.Email({
      name:'userauth',
      server: {
        port: 465,
        host: 'smtp.gmail.com',
        secure: true,
        auth: {
          user: process.env.EMAIL_USERNAME,
          pass: process.env.EMAIL_PASSWORD,
        },
        tls: {
          rejectUnauthorized: false,
        },
      },
       session: {
    jwt: true, 
    // Seconds - How long until an idle session expires and is no longer valid.
    maxAge: 30 * 24 * 60 * 60, // 30 days
  },

      from: process.env.EMAIL_FROM,
      
    })
  ],
    callbacks: {
    session: async (session, user) => {
      const { getUserByEmail } = await adapter.Default({}).getAdapter()
      const { id } = await getUserByEmail(session.user.email)
      session.user.id = id
      return session
    }
  },
  database: process.env.DATABASE_URL
}

export default (req, res) => NextAuth(req, res, options)

What could be wrong?

2 Answers

i think you need to specify the returned object like this return {name: session.user.name, email: session.user.email}

on the page where you need to check if user is signed in

import { useSession } from 'next-auth/client'
  const [ session, loading ] = useSession()
console.log(session)

or server side

import { getSession } from 'next-auth/client'

export default async (req, res) => {
  const session = await getSession({ req })
  /* ... */
  res.end()
}

what do you get?

Related