Skip to content

Commit bb06376

Browse files
authored
Prevent linkWith sessionToken from generating new session (#5801)
1 parent 26943de commit bb06376

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

spec/ParseUser.spec.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1564,6 +1564,26 @@ describe('Parse.User testing', () => {
15641564
expect(u2.getSessionToken()).toBe(model.getSessionToken());
15651565
});
15661566

1567+
it('link with provider via sessionToken should not create new sessionToken (Regression #5799)', async () => {
1568+
const provider = getMockFacebookProvider();
1569+
Parse.User._registerAuthenticationProvider(provider);
1570+
const user = new Parse.User();
1571+
user.set('username', 'testLinkWithProviderNoOverride');
1572+
user.set('password', 'mypass');
1573+
await user.signUp();
1574+
const sessionToken = user.getSessionToken();
1575+
1576+
await user._linkWith('facebook', {}, { sessionToken });
1577+
expect(sessionToken).toBe(user.getSessionToken());
1578+
1579+
expect(user._isLinked(provider)).toBe(true);
1580+
await user._unlinkFrom(provider, { sessionToken });
1581+
expect(user._isLinked(provider)).toBe(false);
1582+
1583+
const become = await Parse.User.become(sessionToken);
1584+
expect(sessionToken).toBe(become.getSessionToken());
1585+
});
1586+
15671587
it('link with provider failed', async done => {
15681588
const provider = getMockFacebookProvider();
15691589
provider.shouldError = true;

src/RestWrite.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -806,6 +806,10 @@ RestWrite.prototype.createSessionTokenIfNeeded = function() {
806806
if (this.query && !this.data.authData) {
807807
return;
808808
}
809+
// Don't generate new sessionToken if linking via sessionToken
810+
if (this.auth.user && this.data.authData) {
811+
return;
812+
}
809813
if (
810814
!this.storage['authProvider'] && // signup call, with
811815
this.config.preventLoginWithUnverifiedEmail && // no login without verification

0 commit comments

Comments
 (0)