首页 > 解决方案 > 如何使用 OAuth 2.0 验证 Flutter 应用程序以访问 Gmail api?

问题描述

在过去的一周里,我一直在尝试访问 Gmail api,但这似乎是不可能的。它在网络应用程序中是可行的,但对于可安装的应用程序,没有运气。我已经使用了所有插件并阅读了所有文档。我也了解如何使用 http 请求来做到这一点,但是我必须手动使用刷新令牌,这绝对不是正确的做法。

通过使用各种包,我可以得到授权码,但是当我关闭 Web 视图窗口时,我得到了错误。每条路对我来说似乎都被封锁了。堆栈溢出也没有足够的答案。

这是我到目前为止所做的:

  1. 我使用google api和googleapi auth包登录。它提供了一个用户同意的登录URL,这在浏览器中是成功的,但随后它在浏览器的url中返回了一个身份验证码,并且在我可以在包中的哪个位置没有答案使用代码获取访问令牌。

  2. 我使用了谷歌登录包,但它绝对没用,因为我不是试图获取公共配置文件而是访问令牌。它给了我错误,说我没有权限。

  3. 我使用了简单的 auth 和 oauth2 客户端包,但就像没有一样。1,用户同意后我无处放置授权码。我正在慢慢失去所有希望,顺便说一句,它适用于 Android 应用程序

标签: androidflutteroauth-2.0google-oauthgmail-api

解决方案


尝试签证 - https://github.com/e-oj/visa

这是 Facebook auth 的示例(它也支持 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(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
  );
}

推荐阅读