Skip to content

Commit 4971873

Browse files
committed
Avoid cleaning currentUser authData in setState
1 parent 2864a95 commit 4971873

File tree

2 files changed

+47
-4
lines changed

2 files changed

+47
-4
lines changed

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

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -503,10 +503,17 @@ public Task<Void> then(Task<Void> task) throws Exception {
503503

504504
@Override
505505
/* package */ void setState(ParseObject.State newState) {
506-
// Avoid clearing sessionToken when updating the current user's State via ParseQuery result
507-
if (isCurrentUser() && getSessionToken() != null
508-
&& newState.get("sessionToken") == null) {
509-
newState = newState.newBuilder().put("sessionToken", getSessionToken()).build();
506+
if (isCurrentUser()) {
507+
State.Builder newStateBuilder = newState.newBuilder();
508+
// Avoid clearing sessionToken when updating the current user's State via ParseQuery result
509+
if (getSessionToken() != null && newState.get(KEY_SESSION_TOKEN) == null) {
510+
newStateBuilder.put(KEY_SESSION_TOKEN, getSessionToken());
511+
}
512+
// Avoid clearing authData when updating the current user's State via ParseQuery result
513+
if (getAuthData() != null && newState.get(KEY_AUTH_DATA) == null) {
514+
newStateBuilder.put(KEY_AUTH_DATA, getAuthData());
515+
}
516+
newState = newStateBuilder.build();
510517
}
511518
super.setState(newState);
512519
}

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1401,6 +1401,42 @@ public void testRemoveWithUserName() throws Exception {
14011401

14021402
//endregion
14031403

1404+
//region testSetState
1405+
1406+
@Test
1407+
public void testSetCurrentUserStateWithoutAuthData() throws Exception {
1408+
// Set user initial state
1409+
String authType = "facebook";
1410+
Map<String, String> authData = new HashMap<>();
1411+
authData.put("facebookToken", "facebookTest");
1412+
ParseUser.State userState = new ParseUser.State.Builder()
1413+
.objectId("test")
1414+
.put("oldKey", "oldValue")
1415+
.put("key", "value")
1416+
.putAuthData(authType, authData)
1417+
.build();
1418+
ParseUser user = ParseObject.from(userState);
1419+
user.setIsCurrentUser(true);
1420+
// Build new state
1421+
ParseUser.State newUserState = new ParseUser.State.Builder()
1422+
.objectId("testAgain")
1423+
.put("key", "valueAgain")
1424+
.build();
1425+
1426+
user.setState(newUserState);
1427+
1428+
// Make sure we keep the authData
1429+
assertEquals(1, user.getAuthData().size());
1430+
assertEquals(authData, user.getAuthData().get(authType));
1431+
// Make sure old state is deleted
1432+
assertFalse(user.has("oldKey"));
1433+
// Make sure new state is set
1434+
assertEquals("testAgain", user.getObjectId());
1435+
assertEquals("valueAgain", user.get("key"));
1436+
}
1437+
1438+
//endregion
1439+
14041440
private static void setLazy(ParseUser user) {
14051441
Map<String, String> anonymousAuthData = new HashMap<>();
14061442
anonymousAuthData.put("anonymousToken", "anonymousTest");

0 commit comments

Comments
 (0)