RxJS概念性帮助:访问和刷新令牌,非同时刷新

时间:2018-06-22 10:04:20

标签: jwt rxjs6

我是RxJS的新手,正在寻求有关如何进行以下过程的概念性帮助:

  1. 后端具有短暂的JWT访问令牌保护。身份验证后,将向客户端颁发初始访问令牌和寿命长的刷新令牌。刷新令牌可用于创建新的访问令牌。
  2. 客户端可以解码令牌,并知道令牌是否已过期。客户端将在过期时延迟刷新访问令牌;不重试失败的请求。
  3. 客户端不得同时发出多个刷新请求。

我努力的最后一部分。我想象一个信号灯或某种“门”:

  • 第一个刷新请求通过门并将其锁定在其后。然后,它将启动实际的令牌刷新。
  • 其他刷新请求在登机口被阻止,等待通过。
  • 令牌刷新完成后,会存储新的访问令牌并抬起门。
  • 所有刷新请求均返回新的访问令牌。

我发现this code使用redux实现门。那有必要吗?

或者,可以通过BehaviorSubject实现门吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案!该代码可用here

使用BehaviorSubject使单例保持状态。通过应用过滤器,我获得了一个阻挡门,当下层门被抬起时,该阻挡门将允许通过:

const gate$ = new BehaviorSubject(true); // open at first
const openGate$ = gate$.pipe(
    filter(x => x === true),
    take(1)   // take only one event, then complete
);

// wait for the gate to open
openGate$.subscribe(() => {
    // do something
});

// close the gate:
gate$.next(false);

// and open it again
gate$.next(true);

通过使用BehaviourSubject,门被初始化并默认打开。