在Flutter中请求URL后从响应获取数据

时间:2020-09-13 11:46:42

标签: flutter oauth

我正在尝试在Flutter中实现OAuth 1.0。 OAuth 1.0的工作方式如下:OAuth flow 我的应用程序请求一个请求令牌,该令牌由我要验证的服务提供。然后,用户被重定向到属于该服务的页面,在该页面中,该用户被授予访问我的应用程序数据的授权。现在,我可以请求访问令牌,该令牌将用于对以后的每个数据请求进行签名。

我正在使用this OAuth plugin进行OAuth过程,并使用Url Launcher plugin来执行请求,因为第一个插件会等待Pin数据,而我希望用户享受完全自动化的过程。 我可以通过OAuth库请求请求令牌,但是以下代码仅启动url,因此我无法从响应中检索数据。

if (await canLaunch(url)) {
  await launch(url, forceWebView: true, enableJavaScript: true);
} else {
  throw 'Could not launch $url';
}

用户交互后如何获取数据?

2 个答案:

答案 0 :(得分:3)

您可以查看flutter_web_auth。我将它用于UnSplash的OAuth登录。

final url = Uri.https('unsplash.com', 'oauth/authorize', {
      'response_type': 'code',
      'client_id': client_id,
      'redirect_uri': redirect_uri,
      'scope': scode,
    });

final result = await FlutterWebAuth.authenticate(
        url: url
            .toString()
            .replaceAll("%2B", "+"),
        callbackUrlScheme: "foobar");

您需要用+替换'%2B',因为url生成器用%2B替换了+符号。

final code = Uri.parse(result).queryParameters['code'];

您将获得将其传递到发布请求以获取令牌的代码。

当然,还有其他OAuth提供程序可用于抖动,但是我已经在我的一个应用程序中使用了它,并对其进行了测试。

答案 1 :(得分:0)

我接受pradyot1996的回答,但我给出了一些解释。

上面给出的提示使我更深入了OAuth 1.0a和plugin。我缺少的步骤是我可以添加一个重定向uri,然后将其替换显示身份验证代码的网页。这是获取服务器返回的验证者代码的最佳方法。

此外,this plugin(可能与pradyot1996建议的一样)允许在应用程序内部打开网页,而无需要求系统打开浏览器并启动服务器来收听答案。如here所述,尽管这是一种不好的做法,但我在应用中向用户通知了此选项。也许我会添加两个选项,以使内容更加清晰。