Skip to content

Commit 999c2cd

Browse files
committed
Merge pull request #614 from koajs/fix-cookie-secure
fix cookies' secure detect
2 parents 93c356a + b5c1a60 commit 999c2cd

4 files changed

Lines changed: 46 additions & 2 deletions

File tree

lib/application.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,10 @@ app.createContext = function(req, res){
157157
response.request = request;
158158
context.onerror = context.onerror.bind(context);
159159
context.originalUrl = request.originalUrl = req.url;
160-
context.cookies = new Cookies(req, res, this.keys);
160+
context.cookies = new Cookies(req, res, {
161+
keys: this.keys,
162+
secure: request.secure
163+
});
161164
context.accept = request.accept = accepts(req);
162165
context.state = {};
163166
return context;

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"composition": "^2.1.1",
2424
"content-disposition": "~0.5.0",
2525
"content-type": "^1.0.0",
26-
"cookies": "~0.5.0",
26+
"cookies": "~0.6.1",
2727
"debug": "*",
2828
"delegates": "^1.0.0",
2929
"destroy": "^1.0.3",

test/context.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ exports = module.exports = function(req, res){
88
var socket = new Stream.Duplex();
99
req = req || { headers: {}, socket: socket, __proto__: Stream.Readable.prototype };
1010
res = res || { _headers: {}, socket: socket, __proto__: Stream.Writable.prototype };
11+
req.socket = req.socket || socket;
12+
res.socket = res.socket || socket;
1113
res.getHeader = function(k){ return res._headers[k.toLowerCase()] };
1214
res.setHeader = function(k, v){ res._headers[k.toLowerCase()] = v };
1315
res.removeHeader = function(k, v){ delete res._headers[k.toLowerCase()] };

test/context/cookies.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,43 @@ describe('ctx.cookies.set()', function(){
8080
})
8181
})
8282
})
83+
84+
describe('with secure', function(){
85+
it('should get secure from request', function(done){
86+
var app = koa();
87+
88+
app.proxy = true;
89+
app.keys = ['a', 'b'];
90+
91+
app.use(function *(next){
92+
this.cookies.set('name', 'jon', { signed: true });
93+
this.status = 204;
94+
})
95+
96+
var server = app.listen();
97+
98+
request(server)
99+
.get('/')
100+
.set('x-forwarded-proto', 'https') // mock secure
101+
.expect(204)
102+
.end(function(err, res){
103+
if (err) return done(err);
104+
105+
var cookies = res.headers['set-cookie'];
106+
cookies.some(function(cookie){
107+
return /^name=/.test(cookie);
108+
}).should.be.ok;
109+
110+
cookies.some(function(cookie){
111+
return /^name\.sig=/.test(cookie);
112+
}).should.be.ok;
113+
114+
cookies.every(function(cookie){
115+
return /secure/.test(cookie);
116+
}).should.be.ok;
117+
118+
done();
119+
})
120+
})
121+
})
83122
})

0 commit comments

Comments
 (0)