Kie*_*101 6

感谢您的提问和回答,它帮助解决了设置 Postman 的部分难题。我发布了我自己的答案,以便在几点上更加清晰,并且可以自动将令牌复制到邮递员请求中

\n

1. Cookie解析器优先

\n
app.use(cookieParser())\n
Run Code Online (Sandbox Code Playgroud)\n

2.发送_csrf cookie

\n
app.use(csrf({ cookie: { httpOnly: true, }}))\n
Run Code Online (Sandbox Code Playgroud)\n

这将返回 Cookie 1:_csrf。\nhttpOnly建议使用,因为它使 Cookie 远离 JavaScript 的访问范围并且更安全

\n

3.发送XSRF-Token cookie

\n

设置每个请求都需要返回的第二个 cookie

\n
app.use((req, res, next) => {\n  res.cookie(\'XSRF-TOKEN\', req.csrfToken())\n  next()\n})\n
Run Code Online (Sandbox Code Playgroud)\n

4.返回XRSF-Token*标头

\n

这需要在每个请求上(所有使用 POST、DELETE 等的请求),并且在每次调用后都不同\n有使用标头的替代方案(可以使用主体属性或查询来代替),但使用标头似乎更干净,尤其是当使用 JSON 时

\n

A。在 Postman 上设置并发送 GET 请求(因为 get 请求默认情况下不检查 csrf)

\n

b. 在 Postman 中设置 POST 请求,使用 GET 请求中的 cookie 值设置此标头

\n
XSRF-Token   abc123...\n
Run Code Online (Sandbox Code Playgroud)\n

*注意连字符 (-),而不是下划线 (_)

\n

4.在Postman中自动设置标题

\n

Postman 会像浏览器一样自动保存并发送 cookie,但是我们需要某种方式从上一个请求中获取 token 并将其复制到我们的下一个请求中

\n

Postman 中的测试在每次请求后运行一段 Javascript,并且可以很好地实现此目的

\n

我在一个 GET 请求上设置了这个测试,所以我确信它在第一个请求上不会无效

\n
XSRF-Token   abc123...\n
Run Code Online (Sandbox Code Playgroud)\n

然后,在 POST 请求的标头中,切换环境变量的复制粘贴字符串

\n
XSRF-Token   {{xsrf_token}}\n
Run Code Online (Sandbox Code Playgroud)\n

现在您应该可以在 Postman 中随心所欲地发布内容了

\n