6

私は Django のデフォルトのユーザー モデルを使用していますが、電子メールは一意ではありません。現在、同じ電子メール アドレスを持つ複数のユーザーがいます。

User_A にメール アドレス user_a@example.com を設定し、新しいユーザー User_B を同じメール アドレス user_a@example.com に登録できます。

これはどのプログラミング世界でも意味がなく、電子メール送信機能との混乱を引き起こし、誤ったパスワードのリセットを引き起こす可能性があります (2 人のユーザーが同じ電子メール アドレスを共有してパスワード リセット リンクが送信された場合)。

元のユーザーのみが元の電子メールアドレスを制御できるため、攻撃者はリセットされた電子メールを受信しないため、これには明らかなセキュリティ上の脆弱性はありません。

ただし、これにより、元のユーザー User_A が元のアカウントからロックアウトされ (パスワードを忘れた場合)、Django が新しいユーザー User_B のみをリセットしようとするため、パスワードのリセットを発行できなくなる可能性があります。明らかに、User_A は User_B のアカウントではなく、自分のアカウントへのアクセスを望んでいます。

  1. 正当化は何ですか?
  2. 明らかに、パスワード リセット機能は電子メールにリンクされているため、電子メールに基づいてパスワードをリセットすると、(パスワード リセット リンクをたどったときに) どのユーザーがリセットされますか?
  3. 電子メール フィールドを一意にするにはどうすればよいですか?
4

2 に答える 2

6

パスワードのリセット機能は、実際には電子メール アドレスに基づいています

対応するメールアドレスを持つすべてのアカウントにリセットメールが送信されます。

電子メール テンプレートに渡されるコンテキストにはuser.


これらはすべて、次を使用してオーバーライドできます。

  • カスタム パスワード リセット フォーム
  • カスタム ユーザー モデル
于 2013-07-07T17:49:40.780 に答える
0

django.contrib.auth は、電子メール アドレスではなくユーザー名フィールドを使用してユーザーを識別するため、2 人のユーザーが同じ電子メール アドレスを持っていても競合はありません。

また、電子メール アドレスは必須ではないため、データベースでは空白または null になります (どちらも適切な一意のキーにはなりません)。

また、他の質問については、ユーザー名で要求されるため、パスワードのリセットにより、要求したユーザーのパスワードがリセットされます。

同じアドレスで 2 つのアカウントを持つことは非常に便利です。たとえば、1 つは管理者アカウントで、もう 1 つは通常のユーザーです。

于 2013-07-07T17:47:02.940 に答える