内部的には、私の Web サイトは、整数の主キーによってインデックス付けされたデータベースにユーザーを保存します。
ただし、ユーザーを、さまざまな状況でそれぞれ使用される、推測が困難な一意の識別子に関連付けたいと思います。例:
- ユーザー プロファイル URL 用の 1 つ: したがって、実際の主キーを含まない URL によってユーザーを見つけて表示できるため、プロファイルがスクレイピングされるのを防ぐことができます。
- 1 つはログインなしのメール配信停止フォームです。ユーザーはログインせずにメール内のリンクをクリックしてメール設定を変更できるため、他の人が URL を簡単に推測してメール設定を改ざんすることを防止できます。
私が見ているように、これらの識別子に必要な重要な特性は、それらが簡単に推測されないこと、一意であること、およびキーまたは識別子を知っていても他の識別子を簡単に見つけることができないことです。
それを踏まえて、私はSecureRandom::urlsafe_base64を使用して、新しいユーザーが作成されるたびに、目的ごとに 1 つずつ、複数のランダム識別子を生成することを考えていました。それらはランダムであるため、一意性を保証するために、挿入前にデータベース チェックを行う必要があります。
誰でもサニティチェックを提供し、これが合理的なアプローチであることを確認できますか?