私はログイン後に3600に設定されるセッションのカウントダウンでアプリケーションを構築しています。角2 + ngrx:セッションタイマを実装
タイマーが60に達すると、アプリはセッションを延長するようユーザーに警告する必要があります。タイマーが0になると、アプリはログアウトする必要があります。
一部のリクエスト(POST)によってセッションタイマーがリセットされるものもあれば、そうでないものもあります。
私は、login、login_successなどのケースとauth.effect
クラスを扱うauth.reducer
を持っています。ここでは、session-durationにサーバーから返された実際の時間を設定します。
私の質問は以下のとおりです。
私は
Observable.timer/interval
を入れて起動しますか? 私は、次のオプションがあります。dashboard.component
auth.effects
auth.service
を私はアクション
DECREMENT_TIMER
を作成してくださいまたは観察可能でカウントダウンを完了したときに、私はちょうどアクションTIMER_TIMEOUT
を作成するのですか?AuthStateをどのようにフォーマットする必要がありますか?私はで毎秒減っていく
sessionSecondsLeft
カウンタを持っているのですか、それともちょうどプロパティーcountdown_at_60
とcountdown_finished
を持っている方が良いですか?
このためのベストプラクティスは何ですか?
DECREMENT_TIMER
アクションが1秒に1回、あなたの状態を更新してしまうと、(あなたが店-デベロッパーツールを使用している場合)にも、あなたの行動ログをスパムう
ありがとうございます。私は3600 - 60からTIMER_RESETアクションを呼び出すためにカウントダウンする別のタイマーを実装しなければならないと理解しています。私は1つの質問がある。私はそのタイマーをどこに置くのですか? auth.serviceまたはdashboard.component? –
まあ、いいえ。 'TIMER_RESET'が起動された後、最初のObservableは59分後に' TIMER_WARNING'を送出し、2分目は1分後に 'TIMER_EXPIRED'をディスパッチします。 'Observable.concat()'は、渡されたObservable _in sequence_にサブスクライブします。以前に別の 'TIMER_RESET'がディスパッチされた場合、両方のタイマーは新しいタイマーのために破棄されます。 – j2L4e
これで、login_successの後、またはPOSTリクエストごとにtimer_resetを呼び出しました。ありがとう。 –