· 7 years ago · Mar 23, 2018, 11:52 AM
1- (NSURLSessionTask *)authenticateUsingOAuthWithURLString:(NSString *)URLString
2 refreshToken:(NSString *)refreshToken
3 success:(void (^)(AFOAuthCredential *credential))success
4 failure:(void (^)(NSError *error))failure;
5
6func refreshTokenIfUnavailable(completionHandler : @escaping(_ finished:Bool,_ error:Error) -> ()) {
7 let credentialData = UserDefaults.standard.object(forKey: CREDENTIAL) as? NSData
8
9 if let credentialData = credentialData {
10 let credential = NSKeyedUnarchiver.unarchiveObject(with: credentialData as Data) as? AFOAuthCredential
11
12 if let _ = credential
13 {
14 if credential!.isExpired {
15 let urlString = OAUTH_BASE_URL
16 let url = URL(string: urlString)
17 let oAuthManager = AFOAuth2Manager(baseURL: url!, clientID: YOUR_AUTH_CLIENT_ID secret: YOUR_AUTH_SECRET_ID)
18 oAuthManager.authenticateUsingOAuth(withURLString: "oauth/token", refreshToken: (credential?.refreshToken)!, success: { (credential) in
19 self.saveAccessToken(credential: credential)
20 completionHandler(true,YOUR_ERROR))
21 }, failure: { (error) in
22 completionHandler((credential != nil),NSError(domain: "", code: 204, userInfo: [NSLocalizedDescriptionKey: error.localizedDescription]))
23 })
24 }
25 completionHandler((credential != nil),YOUR_ERROR_MESSAGE))
26 }
27 }
28}
29
30func saveAccessToken(credential : AFOAuthCredential) {
31
32 KeychainService.saveAccessToken(service: ACCESS_TOKEN as NSString, data: credential.accessToken as NSString)
33
34 let credentialData = NSKeyedArchiver.archivedData(withRootObject: credential)
35 let userDefaults = UserDefaults.standard
36 userDefaults.set(credentialData, forKey: "credentials")
37 userDefaults.synchronize()
38}