@@ -379,8 +379,20 @@ public AccMgrAuthTokenProvider(ClientManager clientManager, String instanceUrl,
379379 @ Override
380380 public String getNewAuthToken () {
381381 SalesforceSDKLogger .i (TAG , "Need new access token" );
382- final Account acc = clientManager .getAccount ();
383- if (acc == null ) {
382+ UserAccountManager userAccountManager = SalesforceSDKManager .getInstance ().getUserAccountManager ();
383+ Account [] accounts = clientManager .getAccounts ();
384+ Account matchingAccount = null ;
385+
386+ // Find the account for this client.
387+ for (Account account : accounts ) {
388+ UserAccount user = userAccountManager .buildUserAccount (account );
389+ if (user != null && lastNewAuthToken .equals (user .getAuthToken ())) {
390+ matchingAccount = account ;
391+ }
392+ }
393+
394+ // Fail early to ensure we don't logout the current user below by sending null.
395+ if (matchingAccount == null ) {
384396 return null ;
385397 }
386398
@@ -401,9 +413,8 @@ public String getNewAuthToken() {
401413 try {
402414
403415 // Invalidate current auth token.
404- final String cachedAuthToken = clientManager .peekRestClient (acc ).getAuthToken ();
405- clientManager .invalidateToken (cachedAuthToken );
406- final UserAccount userAccount = refreshStaleToken (acc );
416+ clientManager .invalidateToken (lastNewAuthToken );
417+ final UserAccount userAccount = refreshStaleToken (matchingAccount );
407418
408419 // NB: userAccount will be null if refresh token is no longer valid
409420 newAuthToken = userAccount != null ? userAccount .getAuthToken () : null ;
@@ -417,11 +428,12 @@ public String getNewAuthToken() {
417428 if (Looper .myLooper () == null ) {
418429 Looper .prepare ();
419430 }
431+ boolean showLoginPage = accounts .length > 1 ;
420432 // Note: As of writing (2024) this call will never succeed because revoke API is an
421433 // authenticated endpoint. However, there is no harm in attempting and the debug logs
422434 // produced may help developers better understand the state of their app.
423435 SalesforceSDKManager .getInstance ()
424- .logout (null , null , false , OAuth2 .LogoutReason .REFRESH_TOKEN_EXPIRED );
436+ .logout (matchingAccount , null , showLoginPage , OAuth2 .LogoutReason .REFRESH_TOKEN_EXPIRED );
425437 }
426438
427439 // Broadcasts an intent that the refresh token has been revoked.
0 commit comments