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

2023-11-28

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

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

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

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

我可以在 axios 上重新创建以保持会话持久性的差异是什么?


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

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

最简单的方法是:

创建实例

const BASE_URL = "https://stackoverflow.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://stackoverflow.com/protected after created session 
createSession().then(() => {
  axiosInstance.post('/protected') // with new cookie
})

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

您也可以使用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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node Js 上的 Axios 不会保留请求服务器上的会话,而 PostMan 会保留 的相关文章

随机推荐