NodeJS 如何在superagent中使用cookie?

sdnqo3pr  于 2023-02-03  发布在  Node.js
关注(0)|答案(6)|浏览(343)

我正在用express做cookie会话管理,如下所示:

req.session.authentication = auth;

我用类似下面的代码验证经过验证的url

if(!req.session.authentication){res.send(401);}

现在我正在用mocha,superagentshould对URL进行测试,但是我似乎找不到一种方法来获取/设置superagent的cookie。我甚至试图在验证测试之前请求登录,但它不起作用,
我已经尝试在mocha BDD套件的before语句中添加登录请求,但是它仍然告诉我该请求未经授权,我已经测试了从浏览器执行请求的身份验证,但是它在套件中不工作,知道为什么吗?

bq8i3lrv

bq8i3lrv1#

使用superagent.agent()(而不是普通的superagent)使请求具有永久性cookie。请参阅超级代理文档中的“保存cookie”或代码示例:一个一个的。

xpcnnkqh

xpcnnkqh2#

看起来下面的代码工作正常;
请求设置('Cookie',“cookie名称1 = cookie值1;Cookie名称2 = Cookie值2”);

luaexgnf

luaexgnf3#

如果问题在于发送CORS请求的Cookie,请使用此处描述的.withCredentials()方法

request
  .get('http://localhost:4001/')
  .withCredentials()
  .end(function(err, res) { })
ssgvzors

ssgvzors4#

既然你提到了你需要同时获得 * 和 * 设置cookie:
获取:

const request = await Superagent.get('...')

const cookie = request.header['set-cookie']

设置:

Superagent.post('...').set('Cookie', 'cookie_info')
vmjh9lq9

vmjh9lq95#

2020年及以后

一个简洁的方法是:

  • 创建一个简单的cookie存储
  • 抽象设置Cookie以在每个请求中发送它
  • 仅在需要时更新cookie
  • 注意我使用graphql所以保留了相同的URL,但您可以将其作为参数:*
const graph = agent =>
  agent.post('/graph')
    .set('cookie', cookieStore.get());

const handleCookie = res =>
  cookieStore.set(res.headers['set-cookie'][0]);

let currentCookie="";
const cookieStore = {
  set: cookie=>{currentCookie=cookie},
  get: cookie=>currentCookie,
};

module.exports = {graph,connectTestUser,handleCookieResponse};

现在,您可以使用graph(agent)发送请求,并在收到可能更新Cookie(设置或清除)的响应时使用handleCookie(response),例如:

graph(agent).end((err,res) => {
  if (err) return done(err);
  res.statusCode.should.equal(200);
  handleCookie(res);
  return done();
});
aamkag61

aamkag616#

添加一个cookie到代理cookiejar:

const request = require('superagent');
const {Cookie} = require('cookiejar')
const agent = request.agent()

agent.jar.setCookie(new Cookie("foo=bar"))

相关问题