ユーザ名の代わりにメールアドレスでユーザを認証するカスタムバックエンドを作成しています。あなたが見ることができるように、私は、また、主キーを電子メールフィールドは一意に、とき、バックエンドの各ユーザのDjangoユーザオブジェクトの作成
class User(AbstractUser):
email = models.EmailField(
_('email address'),
max_length=150,
unique=True,
primary_key=True,
help_text=_('Required. 150 characters of fewer. Must be a valid email address.'),
error_messages={
'unique':_("A user with that email address already exists."),
},
)
:私はすでにAbstractUser
から継承したカスタム・ユーザー・モデルを書きました。
私はバックエンドの書き方についてはドキュメントを以下のよ、と私はこれを読んだ:
Djangoの管理者が緊密にDjangoのユーザオブジェクトに接続されています。 これに対処する最良の方法は、バックエンド用に存在する ユーザごとにDjango Userオブジェクトを作成することです(LDAPディレクトリ、 外部SQLデータベースなど)。これを行うスクリプトを書くか事前に 、またはあなたのauthenticateメソッドは ユーザーがログインにそれを最初に行うことができます。
それは私が、私は推測しているDjangoのUserオブジェクトを(デフォルトのユーザーオブジェクトdjango.contribがされて作成する必要があることを述べています.auth.models.User)の各ユーザーのために。
質問1:バックエンドがget_user(user_id)
とauthenticate(request, **credentials)
(これはdocsに記載されています)を実装するクラスである場合、バックエンドにはどのようにユーザーが含まれますか?私のバックエンドにあるユーザーの意味はですか?
質問2:cutsomユーザオブジェクトがサブクラスAbstractUser
の場合、実際には通常のDjango Userオブジェクトを作成する必要がありますか?彼らはdjango.contrib.auth.models.User
とほとんど同じですが、email-fieldが主キーでユニークである点が異なります。
モデル全体ではなくカスタム認証バックエンドだけが必要です。 https://stackoverflow.com/a/37332393/7654934を参照してください。 –
'email'フィールドは、ログインに使用したい場合は間違いなくユニークであるべきですが、' primary_key'として再考することをお勧めします。これにより、ユーザーが電子メールアドレスを変更するのは難しい場合があります。 – Alasdair
デフォルトの認証バックエンドは、 'USERNAME_FIELD = 'email''を持つカスタムユーザモデルをサポートしています。私はそれを行い、カスタム認証バックエンドは必要ありません。 – Alasdair