Skip to content

Commit 454defa

Browse files
montymxbflovilmart
authored andcommitted
Fixes sessionTokens being overridden in 'find' (parse-community#4332)
* remove session token replacement code * adds cases for _User/_Session with sessionToken and with/without masterKey
1 parent bbf3063 commit 454defa

File tree

2 files changed

+126
-7
lines changed

2 files changed

+126
-7
lines changed

spec/ParseSession.spec.js

+126
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
//
2+
// Tests behavior of Parse Sessions
3+
//
4+
5+
"use strict";
6+
7+
function setupTestUsers() {
8+
const user1 = new Parse.User();
9+
const user2 = new Parse.User();
10+
const user3 = new Parse.User();
11+
12+
user1.set("username", "testuser_1");
13+
user2.set("username", "testuser_2");
14+
user3.set("username", "testuser_3");
15+
16+
user1.set("password", "password");
17+
user2.set("password", "password");
18+
user3.set("password", "password");
19+
20+
return user1.signUp().then(() => {
21+
return user2.signUp();
22+
}).then(() => {
23+
return user3.signUp();
24+
})
25+
}
26+
27+
describe('Parse.Session', () => {
28+
29+
// multiple sessions with masterKey + sessionToken
30+
it('should retain original sessionTokens with masterKey & sessionToken set', (done) => {
31+
setupTestUsers().then((user) => {
32+
const query = new Parse.Query(Parse.Session);
33+
return query.find({
34+
useMasterKey: true,
35+
sessionToken: user.get('sessionToken')
36+
});
37+
}).then((results) => {
38+
const foundKeys = [];
39+
expect(results.length).toBe(3);
40+
for(const key in results) {
41+
const sessionToken = results[key].get('sessionToken');
42+
if(foundKeys[sessionToken]) {
43+
fail('Duplicate session token present in response');
44+
break;
45+
}
46+
foundKeys[sessionToken] = 1;
47+
}
48+
done();
49+
}).catch((err) => {
50+
fail(err);
51+
});
52+
});
53+
54+
// single session returned, with just one sessionToken
55+
it('should retain original sessionTokens with just sessionToken set', (done) => {
56+
let knownSessionToken;
57+
setupTestUsers().then((user) => {
58+
knownSessionToken = user.get('sessionToken');
59+
const query = new Parse.Query(Parse.Session);
60+
return query.find({
61+
sessionToken: knownSessionToken
62+
});
63+
}).then((results) => {
64+
expect(results.length).toBe(1);
65+
const sessionToken = results[0].get('sessionToken');
66+
expect(sessionToken).toBe(knownSessionToken);
67+
done();
68+
}).catch((err) => {
69+
fail(err);
70+
});
71+
});
72+
73+
// multiple users with masterKey + sessionToken
74+
it('token on users should retain original sessionTokens with masterKey & sessionToken set', (done) => {
75+
setupTestUsers().then((user) => {
76+
const query = new Parse.Query(Parse.User);
77+
return query.find({
78+
useMasterKey: true,
79+
sessionToken: user.get('sessionToken')
80+
});
81+
}).then((results) => {
82+
const foundKeys = [];
83+
expect(results.length).toBe(3);
84+
for(const key in results) {
85+
const sessionToken = results[key].get('sessionToken');
86+
if(foundKeys[sessionToken] && sessionToken !== undefined) {
87+
fail('Duplicate session token present in response');
88+
break;
89+
}
90+
foundKeys[sessionToken] = 1;
91+
}
92+
done();
93+
}).catch((err) => {
94+
fail(err);
95+
});
96+
});
97+
98+
// multiple users with just sessionToken
99+
it('token on users should retain original sessionTokens with just sessionToken set', (done) => {
100+
let knownSessionToken;
101+
setupTestUsers().then((user) => {
102+
knownSessionToken = user.get('sessionToken');
103+
const query = new Parse.Query(Parse.User);
104+
return query.find({
105+
sessionToken: knownSessionToken
106+
});
107+
}).then((results) => {
108+
const foundKeys = [];
109+
expect(results.length).toBe(3);
110+
for(const key in results) {
111+
const sessionToken = results[key].get('sessionToken');
112+
if(foundKeys[sessionToken] && sessionToken !== undefined) {
113+
fail('Duplicate session token present in response');
114+
break;
115+
}
116+
foundKeys[sessionToken] = 1;
117+
}
118+
119+
120+
done();
121+
}).catch((err) => {
122+
fail(err);
123+
});
124+
});
125+
126+
});

src/Routers/ClassesRouter.js

-7
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,6 @@ export class ClassesRouter extends PromiseRouter {
2727
}
2828
return rest.find(req.config, req.auth, this.className(req), body.where, options, req.info.clientSDK)
2929
.then((response) => {
30-
if (response && response.results) {
31-
for (const result of response.results) {
32-
if (result.sessionToken) {
33-
result.sessionToken = req.info.sessionToken || result.sessionToken;
34-
}
35-
}
36-
}
3730
return { response: response };
3831
});
3932
}

0 commit comments

Comments
 (0)