3

私は人々が犬の訓練クラスにサインアップするサイトを構築しています. クライアントは、電子メールの確認リンクを介して、現在のクラスのメンバーを今後のクラスに自動的に登録したいと考えています。

サイトにログインせずにこれを実行できるようにしてほしい。したがって、関連するすべての情報は、生成されたリンク自体に含まれている必要があります。理想的には、ボットからのランダムなリクエストによって問題が発生しないように、何らかの方法でリンクをスクランブルする必要があります。

人々がこれを行うために使用する既存のアプリ/コンベンションはありますか?

4

1 に答える 1

3

バックエンドでメールを作成して送信するときに、ユーザーのタイムスタンプ付きトークン (基本的にはユーザー状態のハッシュ) を生成できます。そのトークンとユーザーの UID を URL にエンコードし、リンクにアクセスしたときに登録ビューでその有効性を確認します。ユーザー状態をハッシュすることで、ボットがランダムに正しい URL を生成するという問題に遭遇しないことが (すべての実用的な目的で) 保証されます。

の組み込みのパスワード リセット ビューは、contrib.auth基本的にこれとまったく同じことを行います。ユーザーに送信されるリセット メールの URL には、最後に 2 つのパラメーターがあります。base-64 でエンコードされた UID と生成されたトークンです。トークン生成のソースはhttps://github.com/django/django/blob/master/django/contrib/auth/tokens.pyで、関連するビューはhttps://github.com/djangopassword_reset_confirmにあります。 /django/blob/master/django/contrib/auth/views.py

おそらく、アプリケーションに非常によく似たものを実装できますが、トークンの生成方法に注意する必要があります。トークン ジェネレーターではcontrib.auth、パスワード ハッシュを含むユーザーの内部状態全体をハッシュします。これにより、ユーザーがパスワードをリセットした後にパスワード ハッシュが変更されるため、リンクが 1 回だけ有効になることが保証されます。リンクが一度だけ有効であることを確認したい場合は、ハッシュに変更が保証されている他の状態を含める必要があります。

于 2014-05-27T19:12:00.297 に答える