Angular 2 + ngrx:实现会话定时器

Angular 2 + ngrx: Implement session timer

我正在构建一个带有会话倒计时的应用程序,它在登录后设置为 3600。

当计时器达到 60 时,应用程序应提醒用户延长会话。当计时器达到 0 时,应用程序应注销。

有些请求 (POST) 会重置会话计时器,有些则不会。

我有一个 auth.reducer 可以处理登录、login_success 等情况,还有一个 auth.effect class,我将会话持续时间设置为返回的实际持续时间来自服务器。

我的问题是:

  1. 我应该在哪里启动 Observable.timer/interval? 我有以下选择:

    • dashboard.component
    • auth.effects
    • auth.service
  2. 当 Observable 完成倒计时时,我是创建一个动作 DECREMENT_TIMER 还是只创建一个动作 TIMER_TIMEOUT

  3. 我应该如何格式化 AuthState?我有一个每秒递减 DECREMENT_TIMERsessionSecondsLeft 计数器,还是只有 属性 countdown_at_60countdown_finished 更好?

最佳做法是什么?

DECREMENT_TIMER 操作会每秒更新一次您的状态,并且还会向您的操作日志发送垃圾邮件(如果您使用的是 store-devtools)

我的建议:

创建一个动作TIMER_RESET。如果你想显示它,你可以在商店中保存一个时间戳,但我认为你需要它直到还剩不到一分钟。

@Effect() TIMER_RESET$ = this.actions$
  .ofType(TIMER_RESET)
  .switchMap(
    Observable.concat(
      Observable.timer(1000*60*59).map({type: TIMER_WARNING}),
      Observable.timer(1000*60*1).map({type: TIMER_EXPIRED})
    )
  )