【问题标题】:How to refresh and share access token from main isolate and background isolate如何从主隔离和后台隔离刷新和共享访问令牌
【发布时间】:2019-05-23 12:52:06
【问题描述】:

我的 Flutter 应用正在使用刷新和访问令牌来验证对 c# Web API 的请求。这完美地工作。但是,当我引入 android_alarm_manager 来进行数据的一些后台同步(使用隔离)时,我发现我的刷新令牌在一段时间后变得无效(我将刷新令牌存储在本地存储中)。

这是由于多个隔离同时请求新的访问令牌(因为隔离不共享内存,我无法锁定该方法)。现在我不确定保持令牌同步的最佳方法是什么。

我在想每个隔离区都可以有自己的刷新和访问令牌,但这似乎不是一个好主意,因为我必须在本地存储用户名和密码。我的另一个想法是使用隔离通​​信或本地存储在隔离之间设置一些同步策略,但感觉有点矫枉过正。

谢谢

【问题讨论】:

  • 我认为您应该找到一种仅从一个隔离区刷新令牌的方法,然后共享结果。这样可以避免“旧”无效令牌
  • 你是怎么解决这个问题的?

标签: flutter refresh-token dart-isolates


【解决方案1】:

查看 Flutter 地理围栏示例:

回购:https://github.com/bkonyi/FlutterGeofencing/tree/master/lib/src 文章:https://medium.com/flutter/executing-dart-in-the-background-with-flutter-plugins-and-geofencing-2b3e40a1a124

它使用 SendPorts 跨隔离区进行通信,这听起来像是您需要的:

https://api.flutter.dev/flutter/dart-ui/IsolateNameServer-class.html

然后您可以更新任何隔离区中的令牌并通过 SendPort 将其发送到所有隔离区以保持同步。

【讨论】:

  • 谢谢@athor。但是共享令牌不是问题。就是不同的isolate可以同时刷新(一个请求同时在前端和后台服务中)。这将导致其中一个或另一个收到“旧”无效令牌。其中一个将是最新且有效的,但另一个将继续(认为已刷新)其请求。然后 401 未授权,而它所需要的只是锁定并等待另一个隔离共享正确的令牌。这是一个令人沮丧的情况。
猜你喜欢
  • 2020-12-09
  • 2018-12-29
  • 2014-10-16
  • 2013-03-16
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
相关资源
最近更新 更多