google_oauth2_client如何处理'拒绝访问'

时间:2013-04-24 14:50:57

标签: dart

关于使用Google OAuth库的DartWatch blog教程。问题是如何处理:Google的“拒绝访问”错误?

这是我的代码示例:

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');
   }          
}

但我从未在任何(!)异常上遇到catch阻止。我做错了什么?

我正在使用:
    Dart编辑器版本0.5.0_r21823
    Dart SDK版本0.5.0.1_r21823

1 个答案:

答案 0 :(得分:1)

你永远不会碰到catch块,因为auth.login是一个返回Future的异步操作。

great article on Future error handling on the dartlang.org website

立即

auth.login returns a Future,但它在控制返回事件循环后会发生的工作(有关事件循环的更多信息,请参阅my answer to another question。)

您的代码应该更像:

/// 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.
    }
}