Alex F
Alex F

Reputation: 3549

google_oauth2_client how to handle 'Access denied'

Following the tutorial on DartWatch blog on using Google OAuth library. The question is how to handle: 'Access denied' error from Google ?

Here is my code example:

class Client
{

   GoogleOAuth2 _auth;

   Client()
   {
      _auth = new GoogleOAuth2(
                        '5xxxxxxxxxxxxxx.apps.googleusercontent.com', // Client ID
                        ['openid', 'email', 'profile'],
                        tokenLoaded:oauthReady);
   }

   void doLogin()
   {
       //    _auth.logout();
       //    _auth.token = null;
       try
       {
           _auth.login();
       }
       on AuthException {
           print('Access denied');
       }
       on Exception catch(exp)
       {
           print('Exception $exp occurred');
       }
   }

   void oauthReady(Token token)
   {
      print('Token is: $token');
   }          
}

but I never hit catch block on any (!) exception. What I'm doing wrong ?

I'm using:
Dart Editor version 0.5.0_r21823
Dart SDK version 0.5.0.1_r21823

Upvotes: 2

Views: 214

Answers (1)

Juniper Belmont
Juniper Belmont

Reputation: 3574

You never hit the catch block because auth.login is an asynchronous operation which returns a Future.

There is a great article on Future error handling on the dartlang.org website.

auth.login returns a Future immediately, but the work it does happens after control returns to the event loop (see my answer to another question for more on the event loop.)

Your code should look more like:

/// Returns a Future that completes to whether the login was successful.
Future<boolean> doLogin()
{
    _auth.login()
    .then((_) {
       print("Success!");
       return true;
    }.catchError((e) {
       print('Exception $e occurred.');
       return false; // or throw the exception again.
    }
}

Upvotes: 1

Related Questions