0

我正在使用 nextjs next-auth 创建一个 Web 应用程序,但遇到了问题。当用户单击登录按钮时,他们将被定向到电子邮件表单,这很好,然后当您输入电子邮件时,电子邮件已成功发送,但是当您从电子邮件单击登录时,您将被重定向到主页但仍未登录。控制台我收到此错误:

[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)

这是我的 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)

有什么问题?

4

2 回答 2

0

我认为您需要像这样指定返回的对象 return {name: session.user.name, email: session.user.email}

于 2021-05-12T15:29:28.503 回答
0

在您需要检查用户是否登录的页面上

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

或服务器端

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

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

你得到了什么?

于 2021-05-12T19:17:47.263 回答