你的 use server 函数就是公开的 HTTP 接口
来源:dev.to — 2026-10-27
📋 概述
把一个 'use server' 函数导入受保护的 React 组件、传一个强类型的 TypeScript 对象,看起来就像一次私有的内部调用。它不是:代码库里每个导出的 'use server' 函数都会被编译成一个公开可达的 HTTP POST 端点,任何人只要知道 action 的标识符,就能用 curl 或 Postman 直接调用,随便给 JSON,绕过界面,也常常绕过你以为在生效的鉴权。作者列出三个反复出现的错误:以为布局或父页面里的会话校验能保护 Server Action;以为强类型是一种防护;以为没建 app/api 路由就等于没有接口。三个假设在运行时全部失效。
🔑 核心要点
- 'use server' 不等于私有辅助函数,而是注册一个带公开 Next-Action 哈希的 POST 处理器
- 布局和页面里调用的会话校验,保护不了 action 本身
- 强类型只在编译期存在,运行时 JSON 可以由调用方随便给
- 没有创建 app/api 路由,不代表没有公开接口
💡 金句
“Adding 'use server' does not create a private server helper. It instructs the bundler to register an HTTP POST handler backed by the React Flight protocol and assign it a public Next-Action hash.”
译:加 'use server' 并不会创建私有的服务端辅助函数,它是指示打包器注册一个由 React Flight 协议支撑的 HTTP POST 处理器,并给它一个公开的 Next-Action 哈希。
← 返回 dev.to 首页