Skip to content

Commit dd5ac96

Browse files
author
Lukas Koebis
committed
Fixed: ParseUser.getCurrentUser() returns a non authenticated user when
local datastore is used
1 parent beaa470 commit dd5ac96

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

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

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

503503
@Override
504-
void setState(ParseObject.State newState) {
505-
// Avoid overwriting auth info
506-
State.Builder builder = new State.Builder(getState());
507-
builder.apply(newState);
508-
509-
super.setState(builder.build());
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+
}
510513
}
511514

512515
@Override

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)