如何使用 Mongoose 从 passport.js + express 切换到 Next.js?
How to switch from passport.js + express to Next.js with Mongoose?
我有一个使用 passport 和 mongoose 来存储用户的快速服务器。用户数据经常更改(支付令牌数量、用户名、验证电子邮件地址令牌),UI 必须在每次更改时显示这些更改。
我正在过渡到 Next.js 并仍在尝试使用 mongodb 数据库来存储用户、会话等。我想保持无服务器状态,所以我不能使用 express服务器(尽管据我所知这是可能的)。
我目前正在将 Next-Auth 与 Credentials 提供程序一起使用,但它无法在数据库中保存用户会话,因此当我的用户数据发生变化时,它不会反映在 UI 中。
我该如何解决这个问题?我不应该为此使用 next-auth 吗?
这是我的 /pages/api/auth/[...nextauth].js 文件
import NextAuth from "next-auth/next";
import CredentialsProvider from "next-auth/providers/credentials";
import authenticateUser from "../../../lib/authenticateUser";
export default NextAuth({
providers: [
CredentialsProvider({
name: 'Login',
credentials: {
email: { label: 'E-mail', type: "email", placeholder: "valaki@email.hu" },
password: { label: 'Password', type: "password" }
},
async authorize(credentials, req) {
const payload = {
email: credentials.email,
password: credentials.password,
};
const user = await authenticateUser(payload.email, payload.password);
return user;
}
})
],
secret: process.env.JWT_SECRET,
callbacks: {
jwt: async ({ token, user }) => {
user && (token.user = user)
return token
},
session: async ({ session, token }) => {
session.user = token.user
return session
}
},
session: {
strategy: 'jwt',
maxAge: 1 * 24 * 60 * 60, // 1d
},
jwt: {
secret: process.env.JWT_SECRET,
encryption: true,
},
})
您应该查看这个 repo,它向您展示了如何在 Next.js、Passport.js 和 MongoDb 之间进行集成。
指南部分逐步解释。但请以代码为准,因为该指南可能略有不同并且未更新以反映 repo 中的当前代码。
我有一个使用 passport 和 mongoose 来存储用户的快速服务器。用户数据经常更改(支付令牌数量、用户名、验证电子邮件地址令牌),UI 必须在每次更改时显示这些更改。
我正在过渡到 Next.js 并仍在尝试使用 mongodb 数据库来存储用户、会话等。我想保持无服务器状态,所以我不能使用 express服务器(尽管据我所知这是可能的)。
我目前正在将 Next-Auth 与 Credentials 提供程序一起使用,但它无法在数据库中保存用户会话,因此当我的用户数据发生变化时,它不会反映在 UI 中。
我该如何解决这个问题?我不应该为此使用 next-auth 吗?
这是我的 /pages/api/auth/[...nextauth].js 文件
import NextAuth from "next-auth/next";
import CredentialsProvider from "next-auth/providers/credentials";
import authenticateUser from "../../../lib/authenticateUser";
export default NextAuth({
providers: [
CredentialsProvider({
name: 'Login',
credentials: {
email: { label: 'E-mail', type: "email", placeholder: "valaki@email.hu" },
password: { label: 'Password', type: "password" }
},
async authorize(credentials, req) {
const payload = {
email: credentials.email,
password: credentials.password,
};
const user = await authenticateUser(payload.email, payload.password);
return user;
}
})
],
secret: process.env.JWT_SECRET,
callbacks: {
jwt: async ({ token, user }) => {
user && (token.user = user)
return token
},
session: async ({ session, token }) => {
session.user = token.user
return session
}
},
session: {
strategy: 'jwt',
maxAge: 1 * 24 * 60 * 60, // 1d
},
jwt: {
secret: process.env.JWT_SECRET,
encryption: true,
},
})
您应该查看这个 repo,它向您展示了如何在 Next.js、Passport.js 和 MongoDb 之间进行集成。
指南部分逐步解释。但请以代码为准,因为该指南可能略有不同并且未更新以反映 repo 中的当前代码。