email = request.data.get('email', None)
password = request.data.get('password', None)
account = authenticate(email=email, password=password)
私はauthenticate()関数を使用していますが、常にNoneを返します。 機能を修正するためにいくつかの修正を提案できますか?loginモジュールのdjango restframework
email = request.data.get('email', None)
password = request.data.get('password', None)
account = authenticate(email=email, password=password)
私はauthenticate()関数を使用していますが、常にNoneを返します。 機能を修正するためにいくつかの修正を提案できますか?loginモジュールのdjango restframework
デフォルトでは、djangoはnameを使用してリクエストからユーザを取得/認証します。したがって、ユーザモデルにUSERNAME_FIELD = 'email'
を設定する必要があります。
一意の識別子として使用されているユーザモデルにフィールドの名前を示す文字列。これは通常、ある種のユーザー名ですが、電子メールアドレスやその他の一意の識別子でもあります。一意でないユーザー名をサポートできるカスタム認証バックエンドを使用しない限り、フィールドは一意である必要があります(つまり、その定義に一意= Trueを設定する必要があります)。
また、DRFを使用しているため、使用するCBVがauthentication_classes
を上書きしないことを確認してください。ここで
認証
user = authenticate(username=username, password=password)
の構文は、ここでusernameはユーザモデルのUSERNAME_FIELD値です。デフォルトではその値は 'username'であるため、authenticateメソッドはユーザー名とパスワードの組み合わせを自動的にチェックします。電子メールで認証されるユーザーを変更するには、USERNAME_FIELD = 'email'
を設定する必要があります。
user = authenticate(username=email, password=password)
あなたは 'authenticate'をオーバーライドしましたか? Djangoの 'authenticate'はメールアドレスに対して認証されません – Sayse
どうすれば認証を上書きできますか? –