dart - google_oauth2_client如何处理 'Access denied'

标签 dart

按照DartWatch blog上的教程使用Google OAuth库。问题是如何处理:来自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

最佳答案

您永远不会碰到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.
    }
}

关于dart - google_oauth2_client如何处理 'Access denied',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16195136/

相关文章:

Flutter 自定义包未加载字体和图像 | flutter

flutter - 如何检查TextFormField是否获得焦点

flutter - 为什么在使用twitter_api软件包时仍然出现错误(404)?

flutter - 用户在Google map 上按下标记时如何显示Spinkit? (flutter_spinkit)

dart - 在Dart中拆分

flutter - 如何在 Flutter/Dart 中导入特定于平台的依赖项? (结合网络与Android/iOS)

flutter - Flutter- Bottom Sheet 中的图标和文本无法正确更新UI

flutter - 是否可以在 flutter web 中为域添加前缀?

Dart oauth2 : sample not work

flutter - FLUTTER JUST_AUDIO Navigator.Push在完成播放后不起作用