私はステートレスアーキテクチャを所有しており、認証時にクライアントとサーバー間でJWTトークンを交換します。
データベースに(1日に1回)ユーザーアクセスに関連するタイムスタンプを保存したい。
確かに、誰がアプリにアクセスしていたのかを1日程度のマージンで示すことができるようにしたいと思います(かなりオンラインユーザーのようなものです)。
良い解決策(各クライアント要求でデータベースにヒットしないようにするため)私は、recentUserAccessTimestamp
というプロパティをJWTトークンに追加し、すべての要求でそれをクライアントに送信することを推測しました。
質問です:サーバーでの各リクエストの直後に、クライアントに既存のトークン(WebAppの場合はLocalStorageなど)を置き換えることをお勧めしますか?
リクエスト間でJWTをローテーションすることは確かに可能ですが、すぐにいくつかの問題が発生します。
すべてのクライアント要求でDBを更新したくないと言っていました。しかし、JWTをローテーションする場合、とにかく新しいJWTをRedisまたは別の永続化メカニズムに保存する必要はありませんか?したがって、リクエストごとにユーザーアクセスデータを格納するだけでよいと思います。
マーケティング担当者は、取得する分析データの種類にバナナを使います。それを保存することでen masseを使用すると、同僚の苦痛を大幅に軽減でき、ヒーローのように見えます。
1つの最後の考え。問題のデータの一部の損失を許容できる場合は、メインアプリケーションのメモリ内キューに書き込むだけです。バックグラウンドスレッドは、データを永続ストアに定期的にフラッシュできます。今、誰もが勝ちます。
数分前にこれを探していたところ、この質問に遭遇しました。奇妙なことですが、私はこれに対する正解にまっすぐ進むことを期待していました。
それで私は思いつきました。私はそれを行う最善の方法は、サードパーティまたはあなたのセカンドサーバーを通してそれを処理することであると信じています。つまり、モバイルアプリを構築している場合は、成功したログインとログアウトの両方でセッションを設定できる分析ツールを統合できます。
クライアントを制御できず、サーバーサイドで実行したい場合:
latest_activity
-または必要なもの-日時列/フィールドをユーザーに追加します-またはそれを呼び出すもの-テーブル/コレクションSQLiteのような別のデータベースでこれを行うこともできます。はるかに高速。