Token应放在表单隐藏字段中,由后端模板渲染注入;前端不可自行读取localStorage或JS拼接,后端需从request.form(非header)获取并校验,微前端须由主应用统一管理Token生命周期。

HTML表单提交时Token该放哪?
浏览器原生 提交不带 Authorization 请求头,也不自动读 localStorage 或 cookie。所以你不能指望后端从 header 里取 Authorization: Bearer xxx —— 它根本不会发过去。
必须把 Token 塞进表单数据本身,最稳妥方式是加一个隐藏字段:
<input type="hidden" name="token" value="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...">
这个值必须由后端模板渲染时注入,比如 Flask 的 {{ user_token }}、Django 的 {{ csrf_token }}、或 PHP 的 。前端 JS 拼接、localStorage 读取再写入 DOM,等于白做——绕过服务端签发逻辑,鉴权失效。
注意:别和 CSRF Token 混用同一个字段名。token 和 csrf_token 是两个东西,职责不同,存储位置和校验逻辑也不同。
后端怎么接收和校验这个表单Token?
表单 POST 过来的是 application/x-www-form-urlencoded 数据,不是 JSON,所以后端要从表单体里取,而不是从 header 或 JSON body。
- Flask:
request.form.get("token") - Spring MVC:
@RequestParam("token") String token - PHP:
$_POST["token"]
拿到值后,校验逻辑取决于 Token 类型:
- 如果是 JWT:
jwt.decode()验签名、有效期、aud/iss 等字段,不查数据库 - 如果是服务端生成的随机字符串(如 UUID):
redis.get("token:" + token)查是否存在且未过期,查到就立刻del(原子性销毁) - 别用简单字符串比较(
==),改用恒定时间比对函数,比如 Python 的hmac.compare_digest()
常见错误:后端代码写成从 request.headers.get("Authorization") 取,结果永远拿不到值,直接判鉴权失败。
为什么 Ajax 提交表单总提示 Token 无效?
因为 fetch/XHR 不会自动提交表单里的 hidden 字段,你得手动取、手动塞。
无序列表说明典型错法:
-
document.querySelector('input[name="token"]')没取值,直接发空 body - fetch 发 JSON,但把 Token 塞在 HTML hidden 字段里,没读出来就发了
{ "email": "a@b.c" } - 后端期待 Token 在 form 字段,你却塞进
headers: { 'Authorization': 'Bearer xxx' },它根本不去 header 里找 - 表单页面被 PWA 缓存,用户点“返回”再提交,用的是上一轮的旧 Token,而服务端已刷新或销毁
正确做法只有一条:先取 DOM 值,再决定放哪:
const token = document.querySelector('input[name="token"]').value;
fetch("/api/submit", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ data: "xxx", token })
});
微前端里表单提交的 Token 更容易出问题
微前端架构下,子应用常禁用原生 提交,改用 JS 主动 fetch。这时 formmethod 和 action 实际失效,真正起作用的是主应用封装的请求层。
容易踩的坑:
- 子应用保留原生 form 提交,但没走主应用的拦截器,导致
Authorization头、权限 code、Token 自动续期逻辑全部跳过 - 主应用把 Token 存在 context 或全局状态里,但子应用 JS 没接入该上下文,取不到最新值
- 表单 action 是绝对路径且跨域,触发 CORS 预检(OPTIONS),而预检请求不带任何表单字段,后端没配 OPTIONS 放行,整个请求卡死
关键点:微前端中,Token 的生命周期管理、注入时机、传输路径,必须由主应用统一控制。子应用只负责渲染表单结构,不该持有或拼接 Token。
Token 不是贴纸,贴在哪都有效;它是状态凭证,必须和它的生成、分发、销毁逻辑对齐。错一步,整条链就断。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











