LoginSignup
0
0

More than 5 years have passed since last update.

メール認証で利用する英数文字列をどのように取り扱うか

Posted at

悩むケースが多いのでメモ。取り敢えず普通に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の総数を知りたい場合、別途対応が必要
  • チェックサムロジックが漏れた場合終わり。修正も面倒
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0