悩むケースが多いのでメモ。取り敢えず普通にDBに突っ込むほうがよさそう
なんらかの ストレージ上の Map として実装する方法
Database なり何なりを使って 何らかのMap を代表するキーとしてのトークンを利用する方法。
おそらく一般的でわかりやすい形式だと思う。
ランダムで生成した文字列をトークンとして、それをユーザ情報なりと紐付ける。
Data = token(token_str)
的な形式のストレージ読み込み関数を作成して、トークンからデータを取得できるようにすれば完成。
トークンをもっている人がユーザデータの適正な持ち主と判断できる。
複雑なチェックサムを用いる方法
独自ロジックのチェックサム関数を作成して、ユーザデータから一意の文字列を生成する。
checksum(userData,now) = checksum_str
now を入れることによってデータは常に変化するように見える。
ユーザは、 checksum_str の他に自分のユーザデータと now を再度提出しなければならない。
checksum_str と userData,now のペアが一致すれば、適正なユーザデータの持ち主と判断できる。
メリット
- ストレージ構造が不要
- ストレージを用いない分、構造はよりシンプルになるはず
- ユーザは、checksum_str に加え、ユーザ情報と checksum_str 発行時間を提示しないといけない
- 理論上は、オフラインでのトークン発行が可能
デメリット
- checksum_str の有効期限内にロジックの修正を行った場合、対応が面倒
- 発行されたchecksum_strの総数を知りたい場合、別途対応が必要
- チェックサムロジックが漏れた場合終わり。修正も面倒