android - 如何使用 OAuth 2.0 验证 Flutter 应用程序以访问 Gmail api?
问题描述
在过去的一周里,我一直在尝试访问 Gmail api,但这似乎是不可能的。它在网络应用程序中是可行的,但对于可安装的应用程序,没有运气。我已经使用了所有插件并阅读了所有文档。我也了解如何使用 http 请求来做到这一点,但是我必须手动使用刷新令牌,这绝对不是正确的做法。
通过使用各种包,我可以得到授权码,但是当我关闭 Web 视图窗口时,我得到了错误。每条路对我来说似乎都被封锁了。堆栈溢出也没有足够的答案。
这是我到目前为止所做的:
我使用google api和googleapi auth包登录。它提供了一个用户同意的登录URL,这在浏览器中是成功的,但随后它在浏览器的url中返回了一个身份验证码,并且在我可以在包中的哪个位置没有答案使用代码获取访问令牌。
我使用了谷歌登录包,但它绝对没用,因为我不是试图获取公共配置文件而是访问令牌。它给了我错误,说我没有权限。
我使用了简单的 auth 和 oauth2 客户端包,但就像没有一样。1,用户同意后我无处放置授权码。我正在慢慢失去所有希望,顺便说一句,它适用于 Android 应用程序
解决方案
尝试签证 - 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
);
}
推荐阅读
- angular - 迁移 Angular 6 -> 9 后的模板错误
- swift - 当 iPhone 日期和时间 24 小时制关闭时,字符串中的 DateFormatter 日期返回 nil
- node.js - Nodejs 无服务器 Docker 镜像
- python - 刚刚在 Mac 上安装了 Python,但出现“ModuleNotFoundError: No module named 'encodings'”错误
- javascript - 是否可以删除 html 元素并让您的孩子使用 javascript?
- javascript - 在正方形 CSS 的每个角上叠加 4 个圆圈
- php - 将属性列添加到 WooCommerce 管理产品列表
- archlinux - SDDM 不会在锁定屏幕中使用我的主题,是我弄错了吗?
- php - PHP str_replace 基于类的 HTML 元素的内容
- gitlab - 本地安装 GitLab 页面 - 404