如何解决Next-auth 会话不是使用电子邮件验证创建的
我正在使用 nextjs next-auth 创建一个网络应用程序,但遇到了问题。当用户点击登录按钮时,他们被定向到电子邮件表单,当您输入电子邮件时,电子邮件已成功发送,但是当您从电子邮件中单击登录时,您将被重定向到主页但仍未登录。控制台我收到此错误:
[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)
可能有什么问题?
解决方法
我认为您需要像这样指定返回的对象
return {name: session.user.name,email: session.user.email}
在您需要检查用户是否登录的页面上
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()
}
你得到了什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。