Rga*_*r43 7 javascript typescript next.js next-auth
我正在使用next-auth@4.22.1withnext@13.4.7和 Typescript。每当我使用该signIn()函数时,它都会像平常一样进行登录,但随后会将以下行打印到服务器的控制台:API 处理程序不应返回值,收到的对象。执行此操作后我未登录。
我检查了我的[...nextauth].ts文件,没有发现任何错误。代码如下:
import clientPromise from "@/lib/mongodbadapter";
import { MongoDBAdapter } from "@next-auth/mongodb-adapter";
import NextAuth, { AuthOptions } from "next-auth"
import DiscordProvider from "next-auth/providers/discord";
import GitHubProvider from "next-auth/providers/github";
export const authOptions: AuthOptions = {
adapter: MongoDBAdapter(clientPromise),
providers: [
DiscordProvider({
clientId: process.env.DISCORD_CLIENT_ID!,
clientSecret: process.env.DISCORD_CLIENT_SECRET!
}),
GitHubProvider({
clientId: process.env.GITHUB_CLIENT_ID!,
clientSecret: process.env.GITHUB_CLIENT_SECRET!
})
]
}
export default NextAuth(authOptions)
Run Code Online (Sandbox Code Playgroud)
我已将所有 HTML 元素包装在 SessionProvider 中,如下所示:
export default function App({ Component, pageProps: { session, ...pageProps } }: AppProps) {
return <SessionProvider session={session}>
<Navbar />
<Component {...pageProps} />
</SessionProvider>
}
Run Code Online (Sandbox Code Playgroud)
在我的 index.ts 中,我记录会话,如下所示:
export async function getServerSideProps(ctx: any) {
return {
props: {
session: await getServerSession(ctx.req, ctx.res, authOptions)
}
}
}
Run Code Online (Sandbox Code Playgroud)
服务器日志是这样的:
undefined
- wait compiling /api/auth/[...nextauth] (client and server)...
- event compiled successfully in 265 ms (63 modules)
API handler should not return a value, received object.
API handler should not return a value, received object.
undefined
Run Code Online (Sandbox Code Playgroud)
未定义来自我记录会话的位置。编译是我登录后返回index.ts页面。
即使会话未定义,我的数据库(我正在使用@next-auth/mongodb-adapter@1.1.3)也有相关的用户和帐户文档。
我需要更改什么才能避免此错误并使其实际登录,或者这是我无法控制的 Next-Auth 问题吗?
编辑:我确认我的 IP 在我的 MongoDB Atlas 实例中是允许的。
小智 4
有同样的问题。刚刚更改了[...nextauth].ts
从:
export default NextAuth(authOptions)
Run Code Online (Sandbox Code Playgroud)
到:
const authHandler = NextAuth(authOptions);
export default async function handler(...params: any[]) {
await authHandler(...params);
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。
我们在这里所做的是以“高级”形式初始化 NextAuth,而不是使用其更简单的形式。您可以在链接中阅读有关它的更多信息,但它允许您访问请求和响应对象内的变量。例如,您可以访问 req.cookies。
| 归档时间: |
|
| 查看次数: |
5523 次 |
| 最近记录: |