出于某种原因,getServerSession可以在POST路由上工作,但不能在GET路由上工作.

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...
}

试图模仿POST路由,结果仍然是一样的.

编辑: 它可以在/api上运行,但不能在/api/post/*上运行.出于某种原因,这会不会是某种路由问题?

编辑2:在postman 上不起作用,但在通过浏览器调用API时起作用...?

推荐答案

Solution:个 如果您需要在路由中的服务器端进行会话,则需要添加Header.

import { headers } from "next/headers"

内部获取:

headers: Object.fromEntries(headers())

Typescript相关问答推荐

Angular -使用Phone Directive将值粘贴到控件以格式化值时验证器不工作

如何使打包和拆包功能通用?

如何为ViewContainerRef加载的Angular组件实现CanDeactivate保护?

如何提取密钥及其对应的属性类型,以供在新类型中使用?

如何编写一个类型脚本函数,将一个对象映射(转换)为另一个对象并推断返回类型?

打字类型保护递归判断

使用打字Angular 中的通用数据创建状态管理

在对象中将缺省值设置为空值

TS如何不立即将表达式转换为完全不可变?

APP_INITIALIZER在继续到其他Provider 之前未解析promise

为什么我在这个重载函数中需要`as any`?

打字脚本中的模块化或命名空间

如何在不违反挂钩规则的情况下动态更改显示内容(带有状态)?

Typescript将键数组映射到属性数组

对于VUE3,错误XX不存在于从不存在的类型上意味着什么?

定义一个只允许来自另一个类型的特定字符串文字的类型的最佳方式

递归JSON类型脚本不接受 node 值中的变量

我应该使用服务方法(依赖于可观察的)在组件中进行计算吗?

为什么 typescript 在对象合并期间无法判断无效键?

是否可以从 TypeScript 的类型推断中排除this?