bounty将在4天后过期。回答此问题可获得+200的声誉奖励。Mathias Riis Sorensen正在寻找来自声誉良好的来源的答案。
在本地计算机的终端中使用以下命令时,应用程序在生产模式下尝试使用Next.js应用程序中的next-auth登录失败:
“Yarn成形和Yarn起始”
在终端中观察到的错误消息如下:
TypeError [ERR_INVALID_URL]: Invalid URL
at new NodeError (node:internal/errors:372:5)
at URL.onParseError (node:internal/url:553:9)
at new URL (node:internal/url:629:5)
at Object.redirect (/Users/name/Documents/GitHub/app/node_modules/next-auth/core/lib/default-callbacks.js:16:65)
at createCallbackUrl (/Users/name/Documents/GitHub/app/node_modules/next-auth/core/lib/callback-url.js:20:35)
at init (/Users/name/Documents/GitHub/app/node_modules/next-auth/core/init.js:132:48)
at AuthHandlerInternal (/Users/name/Documents/GitHub/app/node_modules/next-auth/core/index.js:98:28)
at AuthHandler (/Users/name/Documents/GitHub/app/node_modules/next-auth/core/index.js:335:34)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async NextAuthHandler (/Users/name/Documents/GitHub/app/node_modules/next-auth/next/index.js:38:20) {
input: 'undefined/home',
code: 'ERR_INVALID_URL'
}
如果我在终端中使用以下命令以开发模式运行,则不会出现此问题:
Yarn变形
这是我的[... nextauth].ts文件:
import NextAuth from "next-auth";
import type { NextAuthOptions } from "next-auth";
import GoogleProvider from "next-auth/providers/google";
import FacebookProvider from "next-auth/providers/facebook";
import EmailProvider from "next-auth/providers/email";
import { PrismaAdapter } from "@next-auth/prisma-adapter";
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
export const authOptions: NextAuthOptions = {
adapter: PrismaAdapter(prisma),
providers: [
GoogleProvider({
// @ts-ignore
clientId: process.env.GOOGLE_CLIENT_ID,
// @ts-ignore
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
}),
FacebookProvider({
// @ts-ignore
clientId: process.env.FACEBOOK_CLIENT_ID,
// @ts-ignore
clientSecret: process.env.FACEBOOK_CLIENT_SECRET,
}),
EmailProvider({
server: {
host: process.env.SMTP_HOST,
port: Number(process.env.SMTP_PORT),
auth: {
user: process.env.SMTP_USER,
pass: process.env.SMTP_PASSWORD,
},
},
from: process.env.SMTP_FROM,
}),
],
secret: process.env.NEXTAUTH_SECRET,
callbacks: {
session: async ({ session, token }) => {
if (session?.user) {
// @ts-ignore
session.user.id = token.uid;
}
return session;
},
jwt: async ({ user, token }) => {
if (user) {
token.uid = user.id;
}
return token;
},
},
session: {
strategy: "jwt",
maxAge: 30 * 24 * 60 * 60, // 30 days
// updateAge: 24 * 60 * 60, // 24 hours
},
jwt: {
secret: process.env.NEXTAUTH_SECRET,
},
};
export default NextAuth(authOptions);
我试着找出在生产中关于错误消息TypeError [ERR_INVALID_URL]: Invalid URL
的不同之处,但无法找出。我没有更改任何环境变量,我在开发模式下设置了以下变量:
一个二个一个一个
我错过了什么?
1条答案
按热度按时间flseospp1#
未定义NEXTAUTH_URL。您需要在.env file中定义NEXTAUTH_URL。
NextJs内置了多种方式,允许你在测试、开发或生产环境中使用不同的环境变量。尽管通常在生产环境中,你只需要一个.env,因为你不想把你的秘密提交给git。