|
|
@@ -629,7 +629,7 @@ static const NSTimeInterval kMinimumRestoredAccessTokenTimeToExpire = 600.0;
|
|
|
authFlow.authState = [[OIDAuthState alloc]
|
|
|
initWithAuthorizationResponse:authorizationResponse];
|
|
|
// perform auth code exchange
|
|
|
- [self maybeFetchToken:authFlow];
|
|
|
+ [self maybeFetchToken:authFlow fallback:nil];
|
|
|
} else {
|
|
|
// There was a failure, convert to appropriate error code.
|
|
|
NSString *errorString;
|
|
|
@@ -701,14 +701,17 @@ static const NSTimeInterval kMinimumRestoredAccessTokenTimeToExpire = 600.0;
|
|
|
// Complete the auth flow using saved auth in keychain.
|
|
|
GIDAuthFlow *authFlow = [[GIDAuthFlow alloc] init];
|
|
|
authFlow.authState = authState;
|
|
|
- [self maybeFetchToken:authFlow];
|
|
|
+ [self maybeFetchToken:authFlow fallback:options.interactive ? ^() {
|
|
|
+ [self authenticateInteractivelyWithOptions:options];
|
|
|
+ } : nil];
|
|
|
[self addDecodeIdTokenCallback:authFlow];
|
|
|
[self addSaveAuthCallback:authFlow];
|
|
|
[self addCompletionCallback:authFlow];
|
|
|
}
|
|
|
|
|
|
-// Fetches the access token if necessary as part of the auth flow.
|
|
|
-- (void)maybeFetchToken:(GIDAuthFlow *)authFlow {
|
|
|
+// Fetches the access token if necessary as part of the auth flow. If |fallback|
|
|
|
+// is provided, call it instead of continuing the auth flow in case of error.
|
|
|
+- (void)maybeFetchToken:(GIDAuthFlow *)authFlow fallback:(nullable void (^)(void))fallback {
|
|
|
OIDAuthState *authState = authFlow.authState;
|
|
|
// Do nothing if we have an auth flow error or a restored access token that isn't near expiration.
|
|
|
if (authFlow.error ||
|
|
|
@@ -755,6 +758,14 @@ static const NSTimeInterval kMinimumRestoredAccessTokenTimeToExpire = 600.0;
|
|
|
[authState updateWithTokenResponse:tokenResponse error:error];
|
|
|
authFlow.error = error;
|
|
|
|
|
|
+ if (!tokenResponse.accessToken || error) {
|
|
|
+ if (fallback) {
|
|
|
+ [authFlow reset];
|
|
|
+ fallback();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
#if TARGET_OS_IOS && !TARGET_OS_MACCATALYST
|
|
|
if (authFlow.emmSupport) {
|
|
|
[GIDAuthentication handleTokenFetchEMMError:error completion:^(NSError *error) {
|