gpt4 book ai didi

node.js - supertest代理似乎没有在node.jsexpress.js应用程序中保留 session

转载 作者:太空宇宙 更新时间:2023-11-03 22:47:35 25 4
gpt4 key购买 nike

从我读过的所有文档和示例来看,应该可以使用代理在 super 测试中保留 session :

var app = require('../../../server'),
should = require('should'),
request = require('supertest'),
mongoose = require('mongoose'),
User = mongoose.model('User'),
_ = require('lodash');

var user = {
name: 'Sterling Archer',
email: 'duchess@isis.com',
password: 'guest'
};

describe('user.me', function() {

var url = '/user';
var agent = request.agent(app);
var new_user = new User(user);
new_user.save();

it('should return a user object', function(done) {

agent
.post('/signin')
.send(_.omit(user, 'name'))
.expect(200).end(function(err, res) {
console.log(res.headers['set-cookie']);
});

agent
.get(url)
.expect(200)
.end(function(err, res) {
should.not.exist(err);
console.log(res.headers['set-cookie']);
res.body.should.have.property('user');
res.body.user.should.have.properties('name', 'email');
done();
});

});
});

session 应该持续存在,因为上面的每个请求都使用相同的代理。然而,情况似乎并非如此 - set-cookie 日志的输出如下:

[ 'connect.sid=s%3AsFl1DQ4oOxC8MNAm79mnnr9q.gMkp8iEWtG8XlZZ2rkmheBwxKAyLyhixqDUOkYftwzA; Path=/; HttpOnly' ]
[ 'connect.sid=s%3AEzfbPyRGMff7yBXc9OAX3vGT.Ze2YoxZzuB6F6OwOk7mvrk96yPP2G4MGV%2Bt1rVjTyS8; Path=/; HttpOnly' ]

passport.js 用于身份验证和 session 。我希望上面的 connect.sid 对于两个请求都是恒定的,但看起来每次调用都会创建一个新 session ,因此代理不会在第二次调用时登录,并且不会返回任何用户对象。

当我在浏览器中手动测试我的应用程序时,connect.sid 在登录后保持不变,并且我正在测试的功能确实有效。

我一定是代理做错了什么,我希望有人能发现它。否则,我将非常感谢有关如何调试该问题的建议。

最佳答案

您正在发送第二个请求,而没有等待第一个请求得到响应;如果您没有给代理时间来接收响应中的 Set-Cookie header 并将其值用作同一请求中的 Cookie header ,则会创建一个新 session 。试试这个方法:

it('should return a user object', function(done) {

agent
.post('/signin')
.send(_.omit(user, 'name'))
.expect(200).end(function(err, res) {
console.log(res.headers['set-cookie']);
agent
.get(url)
.expect(200)
.end(function(err, res) {
should.not.exist(err);
console.log(res.headers['set-cookie']); // Should print nothing.
res.body.should.have.property('user');
res.body.user.should.have.properties('name', 'email');
done();
});
});
});

关于node.js - supertest代理似乎没有在node.jsexpress.js应用程序中保留 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22842106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com