next-auth GET /api/auth/session 400 CLIENT_FETCH_ERROR 意外令牌'E'(Netlify 部署)



问题:

我的下一个身份验证在本地工作,但当我将其部署到Netlify时,我在访问任何内容时都会得到此CLIENT_FETCH_ERROR(RouteGuard组件调用useSession钩子,如果未在非公共路径上进行身份验证,则会推送到/auth/signin(。

GEThttps://website.com/api/auth/session400-->错误:NextAuth.js 不支持此HTTP GET操作

[next-auth][error][CLIENT_FETCH_error]意外的令牌'E',"错误:这;。。。不是有效的JSON

岗位https://website.com/api/auth/_log400

它在本地调用http://localhost:4200/api/auth/session并以{}返回304。

调用useSession钩子的位置:

_应用程序>会话提供程序会话={会话}>RouteGuard

根据文档的预期API回报:

https://next-auth.js.org/getting-started/client#getsession

调用时,getSession((将向/api/auth/session发送一个请求返回带有会话对象的promise,如果不存在会话,则返回null。

https://next-auth.js.org/getting-started/rest-api#get-apiauthsession

返回客户端安全会话对象-如果没有会话,则返回空对象。返回的会话对象的内容可以通过会话回调进行配置。

会话回调:

async session({ session, token, user }) {
session.accessToken = token.accessToken
session.user._id = token.sub
session.user.name = token.name
session.user.email = token.email
if (token.login_provider) session.user.login_provider = token.login_provider
return session
}

我已经在本地和Netlify上检查过的内容:

  • […nexttauth].ts正确放置在/pages/api/auth文件夹中
  • 它的名字和我上面写的一模一样
  • NEXTAUTH_URL设置正确(未使用任何自定义basePath(
  • 使用Next.js Runtime-v4.27.3也可以自动设置,尽管设置方式没有区别
  • NEXT_PUBLIC_API_URL设置正确(相同URL+/API(
  • NEXTAUTH_SECRET设置正确
  • NextAuthOptions对象的页面:{signIn:"/auth/signIn"}正确
  • /pages/auth/signin页面已正确放置和命名
  • 凭据、Google和Facebook提供商env-var设置正确
"next": "11.1.0",
"next-auth": "^4.6.1",

我还应该检查什么

一天来,我一直在谷歌上搜索,阅读文档,重读文档,尝试一切都无济于事。。。

请帮助/o\

更新:

  • 做了更多的研究,我不知道这是否重要,但localhost上的请求是用cookie发送的,而这些cookie不是在部署的版本上发送的:

next-auth.csrf-token

next-auth.callback-url

更新2:

  • getProviders在Netlify上的getServerSideProps中不起作用,因为我想它不喜欢SSR

通过使用next@12.3.1和next-auth@4.14.0.

在此处找到解决方案:https://answers.netlify.com/t/nexauth-returning-action-not-found/77779/5

相关内容

  • 没有找到相关文章

最新更新