首页 > 解决方案 > 在 Flutter 中请求 url 后从响应中获取数据

问题描述

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

我将这个 OAuth 插件用于 OAuth 程序和Url Launcher 插件来执行请求,因为第一个插件等待 pin 数据,而我希望用户享受完全自动化的过程。我可以通过 OAuth 库请求请求令牌,但以下代码仅启动 url,因此我无法从响应中检索数据。

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

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

标签: flutteroauth

解决方案


您可以查看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 提供程序,但是我已经在我的一个应用程序中使用了它并且也对其进行了测试。


推荐阅读