Nodejs 上的 Axios 不会在请求的服务器上保留会话,而 PostMan 会保留

Posted

技术标签:

【中文标题】Nodejs 上的 Axios 不会在请求的服务器上保留会话,而 PostMan 会保留【英文标题】:Axios on Nodejs wont retain session on requested server while PostMan does 【发布时间】:2018-09-04 01:33:16 【问题描述】:

我可以在 PostMan 上执行以下操作

1) POST 方法登录公司服务器。 2) 在公司服务器上以登录用户的身份发出其他请求。

我创建了一个 nodejs 应用程序来与公司服务器通信。 我正在使用 axios 库进行上述通信。

登录公司服务器后,任何其他呼叫都无法将我识别为授权用户。

我可以反过来在 axios 上重新创建以获得该会话持久性的差异是什么?

【问题讨论】:

使用 request 模块与 cookie-store 有没有办法将 cookie 与 axios 合并?或者我必须改用请求库 我发现:Axios 也可以使用 cookie :) ***.com/a/43178070/7526159 谢谢。相反,我使用了一个名为 'axios-cookiejar-support' 和 'tough-cookie' 的库,并在我的 axios 请求的 jar 选项中使用了它。 【参考方案1】:

在浏览器中,您在 axios 中使用 withCredentials - 此选项会自动保存请求之间的会话。但是在 node.js 中这个参数不起作用,因为 axios 使用的是 http node.js 模块而不是 XHR。

在 node.js 中,您可以使用 axios 实例在请求之间保存 cookie。

最简单的方法是:

创建实例

const BASE_URL = "https://***.com";

// Create instance of axios which utilizes BASE_URL
const axiosInstance = axios.create( baseURL: BASE_URL );

编写createSession函数

const createSession = async () => 
  console.log("create session");
  const authParams = 
    username: "username",
    password: "password"
  ;
  const resp = await axios.post(BASE_URL, authParams);
  const cookie = resp.headers["set-cookie"][0]; // get cookie from request
  axiosInstance.defaults.headers.Cookie = cookie;   // attach cookie to axiosInstance for future requests
;

并使用会话 cookie 拨打电话

// send Post request to https://***.com/protected after created session 
createSession().then(() => 
  axiosInstance.post('/protected') // with new cookie
)

请注意,您的授权方法可能与提供的不同 - 在这种情况下,您只需更改 createSession 方法即可。如果您的会话已过期,您可以直接再次登录或使用 axios.interceptors - 我附上了 gist 的链接。

您也可以将cookie-jar 与 axios 一起使用(链接如下)

更多信息:

https://github.com/axios/axios#creating-an-instance https://github.com/axios/axios#interceptors https://gist.github.com/nzvtrk/ebf494441e36200312faf82ce89de9f2 https://github.com/3846masa/axios-cookiejar-support

【讨论】:

您好,您使用cokie-jardeos 的解决方案似乎不起作用,或者我做错了其他事情。你想看看我的问题***.com/questions/62455037/…

以上是关于Nodejs 上的 Axios 不会在请求的服务器上保留会话,而 PostMan 会保留的主要内容,如果未能解决你的问题,请参考以下文章

Cors Post 请求上的 Axios 网络错误,状态码为 200

Axios不会在nodejs中返回[重复]

如何在nodejs获取请求中访问axios参数

vue+elementUI框架,nodejs+router搭建本地服务器,数据库用mongoose,axios请求碰到的一些问题

Nodejs - Axios 不使用 Cookie 进行发布请求

Axios未在请求中放置原始标头