Skip to content

Commit 5c59ea1

Browse files
committed
Merge pull request #3 from lukas1994/bug_fix
Fixed: ParseUser.getCurrentUser() returns a non authenticated user when local datastore is used
2 parents 609d329 + b96430f commit 5c59ea1

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,16 @@ 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+
newState = newState.newBuilder().put("sessionToken", getSessionToken()).build();
509+
}
510+
super.setState(newState);
511+
}
512+
503513
@Override
504514
/* package */ void validateDelete() {
505515
synchronized (mutex) {

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

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1059,6 +1059,41 @@ 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+
.put("key0", "value0")
1067+
.put("key1", "value1")
1068+
.isComplete(true)
1069+
.build();
1070+
ParseUser.State newState = new ParseUser.State.Builder()
1071+
.put("key0", "newValue0")
1072+
.put("key2", "value2")
1073+
.isComplete(true)
1074+
.build();
1075+
ParseUser.State emptyState = new ParseUser.State.Builder().isComplete(true).build();
1076+
1077+
ParseUser user = ParseObject.from(sessionTokenState);
1078+
user.setIsCurrentUser(true);
1079+
assertEquals(user.getSessionToken(), "sessionToken");
1080+
assertEquals(user.getString("key0"), "value0");
1081+
assertEquals(user.getString("key1"), "value1");
1082+
1083+
user.setState(newState);
1084+
assertEquals(user.getSessionToken(), "sessionToken");
1085+
assertEquals(user.getString("key0"), "newValue0");
1086+
assertNull(user.getString("key1"));
1087+
assertEquals(user.getString("key2"), "value2");
1088+
1089+
user.setIsCurrentUser(false);
1090+
user.setState(emptyState);
1091+
assertNull(user.getSessionToken());
1092+
assertNull(user.getString("key0"));
1093+
assertNull(user.getString("key1"));
1094+
assertNull(user.getString("key2"));
1095+
}
1096+
10621097
//endregion
10631098

10641099
//region testUnlinkFromAsync

0 commit comments

Comments
 (0)