Skip to content

Commit 44cc8d1

Browse files
committed
add: promise support for sessionStore regenerate
1 parent 878f4ad commit 44cc8d1

File tree

2 files changed

+68
-4
lines changed

2 files changed

+68
-4
lines changed

Diff for: session/session.js

+17-3
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,23 @@ defineMethod(Session.prototype, 'destroy', function destroy(fn) {
165165
*/
166166

167167
defineMethod(Session.prototype, 'regenerate', function regenerate(fn) {
168-
this.req.sessionStore.regenerate(this.req, fn);
169-
return this;
170-
});
168+
if (fn) {
169+
this.req.sessionStore.regenerate(this.req, fn)
170+
return
171+
}
172+
173+
if (!fn && !global.Promise) {
174+
throw new Error('must use callback without promises')
175+
}
176+
177+
var sess = this
178+
return new Promise(function (resolve, reject) {
179+
sess.req.sessionStore.regenerate(sess.req, function(err) {
180+
if (err) reject(err)
181+
resolve()
182+
})
183+
})
184+
})
171185

172186
/**
173187
* Helper function for creating a method on a prototype.

Diff for: test/session.js

+51-1
Original file line numberDiff line numberDiff line change
@@ -1588,7 +1588,7 @@ describe('session()', function(){
15881588
})
15891589
})
15901590

1591-
describe('.regenerate()', function(){
1591+
describe('.regenerate()', function () {
15921592
it('should destroy/replace the previous session', function(done){
15931593
var server = createServer(null, function (req, res) {
15941594
var id = req.session.id
@@ -1611,6 +1611,56 @@ describe('session()', function(){
16111611
.expect(200, 'false', done)
16121612
});
16131613
})
1614+
1615+
it('should return Promise without callback', function (done) {
1616+
var server = createServer(null, function (req, res) {
1617+
var id = req.session.id
1618+
req.session.regenerate()
1619+
.then(function() {
1620+
res.end(String(req.session.id === id))
1621+
})
1622+
.catch(function (err) {
1623+
if (err) res.statusCode = 500
1624+
})
1625+
})
1626+
1627+
request(server)
1628+
.get('/')
1629+
.expect(shouldSetCookie('connect.sid'))
1630+
.expect(200, function (err, res) {
1631+
if (err) return done(err)
1632+
request(server)
1633+
.get('/')
1634+
.set('Cookie', cookie(res))
1635+
.expect(shouldSetCookie('connect.sid'))
1636+
.expect(shouldSetCookieToDifferentSessionId(sid(res)))
1637+
.expect(200, 'false', done)
1638+
})
1639+
})
1640+
1641+
it('should not return Promise with callback', function(done){
1642+
var server = createServer(null, function (req, res) {
1643+
var id = req.session.id
1644+
var ret = req.session.regenerate(function (err) {
1645+
if (err) res.statusCode = 500
1646+
res.statusCode = (ret === undefined) ? 200 : 500
1647+
res.end(String(req.session.id === id))
1648+
})
1649+
})
1650+
1651+
request(server)
1652+
.get('/')
1653+
.expect(shouldSetCookie('connect.sid'))
1654+
.expect(200, function (err, res) {
1655+
if (err) return done(err)
1656+
request(server)
1657+
.get('/')
1658+
.set('Cookie', cookie(res))
1659+
.expect(shouldSetCookie('connect.sid'))
1660+
.expect(shouldSetCookieToDifferentSessionId(sid(res)))
1661+
.expect(200, 'false', done)
1662+
})
1663+
})
16141664
})
16151665

16161666
describe('.reload()', function () {

0 commit comments

Comments
 (0)