非浏览器环境下,能否从set-cookie外的请求Cookie提取Token?
解决思路
1. 先摸清楚Token的来源
既然这个Token不在响应的set-cookie里,但能出现在请求Cookie头里,肯定有获取渠道:
- 查响应体:有些服务会把Token直接放在返回的JSON数据里(比如
{ "authToken": "xxx" }),不会走Cookie返回。 - 查接口文档:有没有单独的登录/授权接口,专门返回这个Token字符串?
- 确认是否是你之前手动加的:如果是你自己往请求头里塞的Cookie,直接从存储的地方取就行,不用从响应里扒。
2. 手动维护Cookie(Node.js环境必备)
非浏览器环境下,axios不会自动管Cookie,withCredentials完全没用,得自己动手:
- 用axios实例加请求拦截器,把Token塞进Cookie头:
const axios = require('axios'); const axiosInstance = axios.create(); // 假设你已经拿到了目标Token,存在targetToken变量里 axiosInstance.interceptors.request.use(config => { // 拼接Cookie,保留原有Cookie(如果有的话) config.headers.Cookie = `tokenKey=${targetToken}; ${config.headers.Cookie || ''}`; return config; }); // 用这个实例发GraphQL请求 axiosInstance.post('/graphql', { query: 'yourGraphQLQuery' }) .then(res => console.log(res.data)) .catch(err => console.error(err)); - 要是Cookie多,用
cookie包来解析拼接更方便:const cookie = require('cookie'); const cookieObj = { tokenKey: targetToken, otherCookie: 'xxx' // 其他需要的Cookie }; config.headers.Cookie = cookie.stringify(cookieObj);
3. 抓请求里的Cookie(如果Token是自动生成的)
要是你不知道Token哪来的,但它会出现在某个请求的Cookie头里,可以用拦截器把它抓下来:
const cookie = require('cookie'); axios.interceptors.request.use(config => { if (config.headers.Cookie) { const cookies = cookie.parse(config.headers.Cookie); const targetToken = cookies.tokenKey; // 替换成你的Token键名 // 把Token存起来,比如存在全局变量或文件里,后续给GraphQL用 console.log('抓到目标Token:', targetToken); } return config; });
4. 直接给GraphQL请求加Cookie头
要是你已经明确Token的键和值,最直接的方式就是在GraphQL请求里手动加Cookie头:
axios.post('/graphql', { query: 'yourGraphQLQuery' }, { headers: { 'Cookie': `tokenKey=${yourTokenValue}` } } )
内容的提问来源于stack exchange,提问作者codedkey_
相关产品推荐
相关产品推荐

