GTMOAuth2存储访问令牌的身份验证问题

时间:2015-10-24 21:01:14

标签: ios google-drive-api

我无法使用[self isAuthorized]来确认我之前获得的访问令牌。

我每次使用Google Drive SDK for iOS登录时都会:

// Creates the auth controller for authorizing access to Google Drive.
-(GTMOAuth2ViewControllerTouch *)createAuthController {

    GTMOAuth2ViewControllerTouch *authController;
    authController = [[GTMOAuth2ViewControllerTouch alloc] initWithScope:scopes
                                                                clientID:kClientID
                                                            clientSecret:kClientSecret
                                                        keychainItemName:kKeychainItemName
                                                                delegate:self
                                                        finishedSelector:@selector(viewController:finishedWithAuth:error:)];
    return authController;
}

验证完成后,没有错误,因此应正确保存访问令牌

// Handle completion of the authorization process, and updates the Drive service
// with the new credentials.
-(void)viewController:(GTMOAuth2ViewControllerTouch *)viewController finishedWithAuth:(GTMOAuth2Authentication *)authResult error:(NSError *)error {
    if (error != nil)
    {
        //[self showAlert:@"Authentication Error" message:error.localizedDescription];
        self.driveService.authorizer = nil;
    }
    else
    {
        self.driveService.authorizer = authResult;
    }
}

我使用了一个NSLog来确保我收到了访问令牌而它确实收到了。

-(BOOL)isAuthorized {

    NSString *oauthToken = [((GTMOAuth2Authentication *)self.driveService.authorizer) accessToken];
    NSLog(@"oauthToken: %@", oauthToken);


    return [((GTMOAuth2Authentication *)self.driveService.authorizer) canAuthorize];
}

但是当我看到我是否被授权时,没有保存令牌(oauthToken为NULL),我需要再次登录。

N.B:它在iOS 9之前一直在运作。我不知道它是否相关。

由于 文森特

1 个答案:

答案 0 :(得分:1)

您可能需要尝试this之类的内容来验证登录信息:

// Check for authorization.
GTMOAuth2Authentication *auth =
[GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:kKeychainItemName
                                                      clientID:kClientId
                                                  clientSecret:kClientSecret];
if ([auth canAuthorize]) {
    [self isAuthorizedWithAuthentication:auth];
}

另一方面,如果您确实需要访问令牌,请查看此SO post,但是,存储访问令牌不是最佳做法,因为访问令牌具有到期时间。祝你好运希望这可以帮助。