NEXT_AUTH会话在POST方法中不可用

krcsximq  于 2023-06-29  发布在  其他
关注(0)|答案(1)|浏览(109)

我正在使用Google作为提供商实现NextAuth身份验证。我还集成了MongoDB作为DB。在API端点上,我使用getSession获取会话。但是会话在POST方法中将变为null,并且可以很好地处理GET请求。

getDocs.js

  1. import { getSession } from "next-auth/react"
  2. export default async function handler(req,res){
  3. if(req.method!="GET") res.status(400).json({status:"error",msg:"Cannot fulfil GET API request"})
  4. const session = await getSession({req})
  5. console.log(session) // session is there. Works fine
  6. // further code
  7. }

updateDoc.js

  1. import { getSession } from "next-auth/react"
  2. import connectDB from "../../../lib/dbconnect/dbconnect"
  3. import Document from "../../../lib/models/document"
  4. import clientPromise from "@/lib/mongodb"
  5. connectDB()
  6. export default async function handler(req,res){
  7. console.log(req.body)
  8. if(req.method !== "POST") res.status(400).json({status: "error", msg: "Cannot fulfill GET API request"})
  9. const session = await getSession({req})
  10. console.log(session) // session is null. Works fine
  11. // further code
  12. }

API/auth/[…nextauth].js

  1. import NextAuth from "next-auth"
  2. import GoogleProvider from "next-auth/providers/google"
  3. import clientPromise from "../../../lib/mongodb"
  4. import { MongoDBAdapter } from "@next-auth/mongodb-adapter"
  5. export const authOptions = {
  6. providers: [
  7. GoogleProvider({
  8. clientId: process.env.NEXTAUTH_GOOGLE_CLIENT_ID,
  9. clientSecret: process.env.NEXTAUTH_GOOGLE_CLIENT_SECRET,
  10. }),
  11. ],
  12. pages:{
  13. signIn:'/signin'
  14. },
  15. adapter: MongoDBAdapter(clientPromise),
  16. }
  17. export default NextAuth(authOptions)

我发现它对get请求工作得很好,因为我在删除if条件以检查方法类型后尝试向updateDoc.js发出get请求,它工作得很好。
我该怎么办?

zujrkrfu

zujrkrfu1#

找到了问题的答案
使用getServerSession代替getSession

相关问题