google / gtm-oauth2

Google Toolbox for Mac - OAuth 2 Controllers
Apache License 2.0
126 stars 70 forks source link

Authentication suddenly failing with no error - did Google change the API? #4

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
I've been using these classes for weeks now with no problems but a few days ago 
it suddenly stopped working without me touching anything. I suspect Google 
changed something with their API but I can't work out what.

My Google Reader client appears to successfully authenticate and no errors are 
returned, yet when I ask it for the number of subscriptions with the URL 
https://www.google.com/reader/api/0/subscription/list?output=json it returns:

{"subscriptions":[]}

If I paste the same URL into my web browser when I am logged into Google, it 
returns the subscriptions successfully. If I then log out and try it, it 
returns the same data my app returns, so it would seem to be an authentication 
issue.

It seems like I'm not the only one to have experienced it suddenly fail to work 
in the past few days, although what caused it remains unknown:
http://stackoverflow.com/questions/8684769/problems-with-googles-oauth

Can anyone else shed some light on this?

I'm running it on OS X 10.6.8 using Xcode 4.2.

Original issue reported on code.google.com by mwoods...@googlemail.com on 31 Dec 2011 at 10:41

GoogleCodeExporter commented 9 years ago
Here's my code btw. I haven't modified the gtm-oauth classes at all.

- (void)connectToSavedAccountSession
{
    // Connect to saved account if available
    GTMOAuth2Authentication *auth = [GTMOAuth2WindowController authForGoogleFromKeychainForName:[NSString stringWithFormat:@"%@ - Google Reader",self.clientName] 
                                                                                       clientID:self.clientID
                                                                                   clientSecret:self.clientSecret];

    [mAuth autorelease];
    mAuth = [auth retain];
}

- (void)signInWithDelegate:(id)delegate parentWindow:(NSWindow*)window
{
    [self signOut];

    // For Google APIs, the scope strings are available
    // in the service constant header files.
    NSString *scope = @"https://www.googleapis.com/auth/plus.me";

    // Display the autentication sheet
    GTMOAuth2WindowController *windowController;
    windowController = [GTMOAuth2WindowController controllerWithScope:scope
                                                             clientID:self.clientID
                                                         clientSecret:self.clientSecret
                                                     keychainItemName:[NSString stringWithFormat:@"%@ - Google Reader",self.clientName]
                                                       resourceBundle:nil];

    // During display of the sign-in window, loss and regain of network
    // connectivity will be reported with the notifications
    // kGTMOAuth2NetworkLost/kGTMOAuth2NetworkFound
    //
    // See the method signInNetworkLost: for an example of handling
    // the notification.

    // Optional: Google servers allow specification of the sign-in display
    // language as an additional "hl" parameter to the authorization URL,
    // using BCP 47 language codes.
    //
    // For this sample, we'll force English as the display language.
    NSDictionary *params = [NSDictionary dictionaryWithObject:@"en"
                                                       forKey:@"hl"];
    windowController.signIn.additionalAuthorizationParameters = params;

    // Optional: display some html briefly before the sign-in page loads
    NSString *html = @"<html><body><div align=center>Loading sign-in page...</div></body></html>";
    windowController.initialHTMLString = html;

    // Most applications will not want the dialog to remember the signed-in user
    // across multiple sign-ins, but the sample app allows it.
    //    windowController.shouldPersistUser = [mPersistUserCheckbox state];

    // By default, the controller will fetch the user's email, but not the rest of
    // the user's profile.  The full profile can be requested from Google's server
    // by setting this property before sign-in:
    //
    // windowController.signIn.shouldFetchGoogleUserProfile = YES;
    //
    // The profile will be available after sign-in as
    //
    //   NSDictionary *profile = windowController.signIn.userProfile;

    [windowController signInSheetModalForWindow:window
                                       delegate:self
                               finishedSelector:@selector(windowController:finishedWithAuth:error:)];
}

- (void)signOut 
{
    if ([mAuth.serviceProvider isEqual:kGTMOAuth2ServiceProviderGoogle]) {
        // Remove the token from Google's servers
        [GTMOAuth2WindowController revokeTokenForGoogleAuthentication:mAuth];
    }

    // Remove the stored Google authentication from the keychain, if any
    [GTMOAuth2WindowController removeAuthFromKeychainForName:[NSString stringWithFormat:@"%@ - Google Reader",self.clientName]];

    // Discard our retained authentication object
    [mAuth release];
    mAuth = nil;
}

- (BOOL)isAuthorized
{
    return mAuth.canAuthorize;
}

- (void)windowController:(NSWindowController*)windowController 
finishedWithAuth:(GTMOAuth2Authentication*)theAuth error:(NSError*)error
{
    if (error) NSLog(@"Error: %@",[error localizedDescription]);

    [mAuth release];
    mAuth = [theAuth retain];
}

Original comment by mwoods...@googlemail.com on 31 Dec 2011 at 10:44

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
This sounds like an issue with the Reader API, not with the gtm-oauth2 
controllers.

Original comment by grobb...@google.com on 4 Jan 2012 at 1:59

GoogleCodeExporter commented 9 years ago
Closing as done since this seems to be pretty old without any new info.

Original comment by thomasvl@google.com on 30 Oct 2014 at 1:49