【问题标题】:Get data from response after url request in Flutter在 Flutter 中请求 url 后从响应中获取数据
【发布时间】:2020-09-13 11:46:42
【问题描述】:

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

我使用 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';
}

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

【问题讨论】:

    标签: flutter oauth


    【解决方案1】:

    您可以查看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'];
    

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

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

    【讨论】:

    • 我尝试了您的解决方案,但它没有作为第一步执行令牌请求;你能建议我怎么做吗?
    • 您能分享一下您为此采取的步骤吗?
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-08-28
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多