Skip to content

Commit df0a95d

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

File tree

2 files changed

+42
-3
lines changed

2 files changed

+42
-3
lines changed

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -504,9 +504,12 @@ public Task<Void> then(Task<Void> task) throws Exception {
504504
@Override
505505
/* package */ void setState(ParseObject.State newState) {
506506
// 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();
507+
if (isCurrentUser() && getSessionToken() != null && newState.get(KEY_SESSION_TOKEN) == null) {
508+
newState = newState.newBuilder().put(KEY_SESSION_TOKEN, getSessionToken()).build();
509+
}
510+
// Avoid clearing authData when updating the current user's State via ParseQuery result
511+
if (isCurrentUser() && getAuthData() != null && newState.get(KEY_AUTH_DATA) == null) {
512+
newState = newState.newBuilder().put(KEY_AUTH_DATA, getAuthData()).build();
510513
}
511514
super.setState(newState);
512515
}

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)