Search code examples
reactjstypescriptnext.jsnext-auth

NextAuth getServerSession works on POST api but not GET


For some reason getServerSession works on POST route but not on GET route.

import { getServerSession } from "next-auth"
import { authOptions } from "../../auth/[...nextauth]/route"
import { NextResponse } from "next/server"

export async function GET(){
  const session = await getServerSession(authOptions)
  console.log("Session:", session)
  console.log("UserID:",session?.user.id)
  return NextResponse.json({posts: []}, {status: 200})

}
import { getServerSession } from "next-auth"
import { NextRequest, NextResponse } from "next/server"
import { authOptions } from "../../auth/[...nextauth]/route"

export async function POST(req: NextRequest){
    const session = await getServerSession(authOptions)
    if(!session) return NextResponse.json({message: "You don't have persmision!"}, {status: 401})
    //other code...
}

tried to mimic POST route, still same result.

Edit: It works on /api, but doesnt in /api/posts/* for some reason, can this be some kind of routing problem ?

Edit2: Doesn't work on postman, but works when calling api trough browser....?


Solution

  • Solution: If you need session on server side in route, you need to add headers.

    import { headers } from "next/headers"
    
    

    Inside fetch:

    headers: Object.fromEntries(headers())