如何使用OAuth 2.0验证Flutter应用程序以访问Gmail API?

3
过去一周,我一直在尝试访问 Gmail API,但似乎无法实现。网页应用程序可以做到,但对于可安装的应用程序来说就不行了。我已经使用了所有的插件,并阅读了所有文档。我也知道如何通过 HTTP 请求来实现,但这样我必须手动使用刷新令牌,这绝对不是正确的做法。
通过使用各种包,我可以获得授权码,但是当我关闭 Web 视窗时,会出现错误。每条路似乎都对我堵死了,而且 stack overflow 上的答案也不足够。
以下是我目前所做的:
  1. 我使用 Google API 和 GoogleAPI Auth 包进行登录。它提供了一个用户同意的登录 URL,在浏览器中成功完成,但是它返回了一个认证代码,但我不知道在哪里使用该代码获取访问令牌。
  2. 我使用 Google 登录包,但它无用,因为我不是想获取公共配置文件,而是获取访问令牌。它给我报错,说我没有权限。
  3. 我使用简单的认证和 OAuth2 客户端包,但和第一种情况一样,我不知道在用户同意后该在哪里放置授权码。
    我正在逐渐失去所有希望,这是为 Android 应用程序准备的。
2个回答

1

请尝试使用visa - https://github.com/e-oj/visa

以下是使用Facebook身份验证的示例(也支持Google):

import 'package:visa/auth-data.dart';
import 'package:visa/fb.dart';

class AuthPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      /// Simply Provide all the necessary credentials
      body: FaceBookAuth().visa.authenticate(
          clientID: '139732240983759',
          redirectUri: 'https://www.e-oj.com/oauth',
          scope: 'public_profile,email',
          state: 'fbAuth',
          onDone: done
      )
    );
  }
}

和“done”回调函数:

done(AuthData authData){
  print(authData);

  /// You can pass the [AuthData] object to a 
  /// post-authentication screen. It contaions 
  /// all the user and OAuth data collected during
  /// the authentication process. In this example,
  /// our post-authentication screen is "complete-profile".
  Navigator.pushReplacementNamed(
      context, '/complete-profile', arguments: authData
  );
}

0

在这里,我创建了一个基本的邮件应用程序,可以从用户帐户中加载前10封电子邮件。这段代码可能不是API的最佳实现方式,但我尽力使用可用信息编写了它,希望这段代码能够帮助到您。Github链接

对于Google控制台,请创建一个用户类型为外部且处于测试状态的应用程序,用于OAuth ClientId和Android应用程序类型。(请注意:Android和iOS设备的ClientId不需要客户端密钥)

要获取SHA-1指纹,请按照此链接中给出的步骤进行操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接