Skip to content

Commit c6e2493

Browse files
author
Lukas Koebis
committed
Fixed: ParseUser.getCurrentUser() returns a non authenticated user when local datastore is used
Repro project: https://www.dropbox.com/s/m6vl215mg3nj8uo/Parse-Starter-Project-1.9.4.zip 1- change keys 2- click SIGN UP -> make sure a user & a post are created 3- click GETCURRENTUSER -> make sure user and session are shown 4- click ISAUTHENTICATED() -> make sure it returns true 5- now click QUERY DATA WITH INCLUDE("USER") 6- repeat step 3 and 4 and notice the issue
1 parent 56d7970 commit c6e2493

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

Parse/src/main/java/com/parse/ParseUser.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,18 @@ public Task<Void> then(Task<Void> task) throws Exception {
500500
}
501501
}
502502

503+
@Override
504+
/* package */ void setState(ParseObject.State newState) {
505+
// Avoid clearing sessionToken when updating the current user's State via ParseQuery result
506+
if (isCurrentUser() && getSessionToken() != null
507+
&& newState.get("sessionToken") == null) {
508+
super.setState(newState.newBuilder().put("sessionToken", getSessionToken()).build());
509+
}
510+
else {
511+
super.setState(newState);
512+
}
513+
}
514+
503515
@Override
504516
/* package */ void validateDelete() {
505517
synchronized (mutex) {

Parse/src/test/java/com/parse/ParseUserTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1059,6 +1059,25 @@ public void testUpgradeToRevocableSessionAsync() throws Exception {
10591059
verify(currentUserController, times(1)).setAsync(user);
10601060
}
10611061

1062+
@Test
1063+
public void testDontOverwriteSessionTokenForCurrentUser() throws Exception {
1064+
ParseUser.State sessionTokenState = new ParseUser.State.Builder()
1065+
.sessionToken("sessionToken")
1066+
.build();
1067+
ParseUser.State emptyState = new ParseUser.State.Builder().build();
1068+
1069+
ParseUser user = ParseObject.from(sessionTokenState);
1070+
user.setIsCurrentUser(true);
1071+
assertEquals(user.getSessionToken(), "sessionToken");
1072+
1073+
user.setState(emptyState);
1074+
assertEquals(user.getSessionToken(), "sessionToken");
1075+
1076+
user.setIsCurrentUser(false);
1077+
user.setState(emptyState);
1078+
assertNull(user.getSessionToken());
1079+
}
1080+
10621081
//endregion
10631082

10641083
//region testUnlinkFromAsync

0 commit comments

Comments
 (0)