Просмотр исходного кода

Refresh tokens on button tap and tokens are within 10 minutes of expiration or expired. (#462)

Brianna Morales 1 год назад
Родитель
Сommit
51d362f2d8

+ 14 - 1
Samples/Swift/DaysUntilBirthday/Shared/ViewModels/VerifiedAgeViewModel.swift

@@ -25,6 +25,9 @@ final class VerifiedAgeViewModel: ObservableObject {
   /// - note: This will publish updates when its value changes.
   @Published var verificationState: VerificationState
 
+  /// Minimum time to expiration for a restored access token (10 minutes).
+  let kMinimumRestoredAccessTokenTimeToExpire: TimeInterval = 600.0
+
   private lazy var loader: VerificationLoader = {
     return VerificationLoader(verifiedViewAgeModel: self)
   }()
@@ -36,7 +39,17 @@ final class VerifiedAgeViewModel: ObservableObject {
 
   /// Verifies the user's age is over 18.
   func verifyUserAgeOver18() {
-    loader.verifyUserAgeOver18()
+    switch self.verificationState {
+    case .verified(let result):
+      if let expirationDate = result.accessToken?.expirationDate,
+         expirationDate.timeIntervalSinceNow <= kMinimumRestoredAccessTokenTimeToExpire {
+        result.refreshTokens { (result, error) in
+          self.verificationState = .verified(result)
+        }
+      }
+    case .unverified:
+      loader.verifyUserAgeOver18()
+    }
   }
 }
 

+ 0 - 3
Samples/Swift/DaysUntilBirthday/iOS/UserProfileView.swift

@@ -58,9 +58,6 @@ struct UserProfileView: View {
                          destination: VerificationView(verifiedAgeViewModel: verifiedAgeViewModel)
           .onAppear {
             verifiedAgeViewModel.verifyUserAgeOver18()
-          }
-          .onDisappear {
-            verifiedAgeViewModel.verificationState = .unverified
           })
 #endif
           Spacer()