我想知道是否有人知道一个基于Flutter的解决方案,用于解决以下错误,该错误是由Google在使用googlesapi_auth包向Google API进行身份验证时决定阻止回送流而导致的:
一些背景:
- My Flutter app uploads and downloads files toGoogle Drive. To do this, my app leverages 3 packages:googlesapi,googlesapi_auth, andurl_launcherpackage.
- 我正在使用googlesapi_auth包中的clientViaUserConsent()函数,以便获得经过身份验证的HTTP客户端(以及缓存的访问令牌,以便下次需要访问另一个HTTP客户端示例时使用)。
- 我使用上面返回的HTTP客户端,通过googlesapi包实现的结构向Google Drive发出上传文件请求或从Google Drive发出下载文件请求。
- 在clientViaUserConsent()调用期间,我传递了必要的OAuth客户端ID(来自Google云控制台)和必要的Google云端硬盘范围。
- clientViaUserConsent()的工作方式是我将一个回调函数传递给它的第三个位置参数。当用户必须通过启动授权表单的url(作为参数传递给回调函数)来向Google的身份验证/授权服务器进行身份验证时,就会调用这个函数。我使用url_launcher包中的launchUrl()**函数来启动url。
- 如果身份验证成功,则**clientViaUserConsent()**才会使用经过身份验证的HTTP客户端对象的所需示例完成。
即
var client = await clientViaUserConsent(
clientId,
scopes,
(String urlConsentForm) async {
await launchUrl(Uri.parse(urlConsentForm));
},
);
这都是在2022年之前工作的,但是当我上周尝试使用相同的代码时,我得到了上面的环回流错误。
阅读文档中的这个错误,它说解决方案是使用新的google_sign_in包,但当我查看这个包时,我不认为它返回一个经过身份验证的HTTP客户端,我希望找到一个解决方案,这样我就不必解构我的代码的其余部分。
更具体地说,我希望继续使用googlesapi实现的基于Dart的结构,而不是Google API规范发布的基于REST的结构。
有什么想法吗?非常感谢。
/何塞
1条答案
按热度按时间bmp9r5qi1#
这是您给我看的urlConsentForm,如果您查看它,您会发现它包含以下内容
redirect_uri=http%3A%2F%2Flocalhost%3A63577
此重定向URI不正确它应该是
http://127.0.0.1
而不是某个端口本地主机https://accounts.google.com/o/oauth2/v2/auth?client_id=xxxxxxxxxxxx-i2p8763g6u7sthlbuk1huge7kqja0ah5.apps.googleusercontent.com&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A63577&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.file&code_challenge=z1YfOQcfPoZd8O8Ef4piF80ueI75f5_Im9KCVOgp79w&code_challenge_method=S256&state=lPjlouMnnICNCjLltkqvl30eGkkDcx0f
话虽如此,我仍然认为您应该使用本期文章#452中提到的包。