File tree Expand file tree Collapse file tree 3 files changed +51
-0
lines changed Expand file tree Collapse file tree 3 files changed +51
-0
lines changed Original file line number Diff line number Diff line change @@ -1361,7 +1361,14 @@ export default class ParseObject {
1361
1361
if ( otherAttributes . objectId ) {
1362
1362
o . id = otherAttributes . objectId ;
1363
1363
}
1364
+ let preserved = null ;
1365
+ if ( typeof o . _preserveFieldsOnFetch === 'function' ) {
1366
+ preserved = o . _preserveFieldsOnFetch ( ) ;
1367
+ }
1364
1368
o . _clearServerData ( ) ;
1369
+ if ( preserved ) {
1370
+ o . _finishFetch ( preserved ) ;
1371
+ }
1365
1372
}
1366
1373
o . _finishFetch ( otherAttributes ) ;
1367
1374
if ( json . objectId ) {
Original file line number Diff line number Diff line change @@ -249,6 +249,16 @@ export default class ParseUser extends ParseObject {
249
249
}
250
250
}
251
251
252
+ /**
253
+ * Class instance method used to maintain specific keys when a fetch occurs.
254
+ * Used to ensure that the session token is not lost.
255
+ */
256
+ _preserveFieldsOnFetch ( ) : AttributeMap {
257
+ return {
258
+ sessionToken : this . get ( 'sessionToken' ) ,
259
+ } ;
260
+ }
261
+
252
262
/**
253
263
* Returns true if <code>current</code> would return this user.
254
264
* @method isCurrent
Original file line number Diff line number Diff line change @@ -615,4 +615,38 @@ describe('ParseUser', () => {
615
615
expect ( user . getUsername ( ) ) . toBe ( 'test' ) ;
616
616
expect ( user . get ( 'authData' ) . anonymous ) . toBe ( null ) ;
617
617
} ) ;
618
+
619
+ it ( 'maintains the session token when refetched' , asyncHelper ( ( done ) => {
620
+ ParseUser . enableUnsafeCurrentUser ( ) ;
621
+ ParseUser . _clearCache ( ) ;
622
+ Storage . _clear ( ) ;
623
+ CoreManager . setRESTController ( {
624
+ request ( ) {
625
+ return ParsePromise . as ( {
626
+ objectId : 'uidfetch' ,
627
+ username : 'temporary' ,
628
+ number : 123 ,
629
+ sessionToken : 'abc141' ,
630
+ } , 201 ) ;
631
+ } ,
632
+ ajax ( ) { }
633
+ } ) ;
634
+
635
+ ParseUser . signUp ( 'temporary' , 'password' ) . then ( ( u ) => {
636
+ expect ( u . getSessionToken ( ) ) . toBe ( 'abc141' ) ;
637
+ expect ( u . get ( 'number' ) ) . toBe ( 123 ) ;
638
+ ParseUser . _clearCache ( ) ;
639
+
640
+ let u2 = ParseObject . fromJSON ( {
641
+ objectId : 'uidfetch' ,
642
+ className : '_User' ,
643
+ username : 'temporary' ,
644
+ } , true ) ;
645
+ expect ( u . getSessionToken ( ) ) . toBe ( 'abc141' ) ;
646
+ expect ( u2 . getSessionToken ( ) ) . toBe ( 'abc141' ) ;
647
+ expect ( u . get ( 'number' ) ) . toBe ( undefined ) ;
648
+ expect ( u2 . get ( 'number' ) ) . toBe ( undefined ) ;
649
+ done ( ) ;
650
+ } ) ;
651
+ } ) ) ;
618
652
} ) ;
You can’t perform that action at this time.
0 commit comments