2017-02-01 11 views
0
email = request.data.get('email', None) 
password = request.data.get('password', None) 
account = authenticate(email=email, password=password) 

私はauthenticate()関数を使用していますが、常にNoneを返します。 機能を修正するためにいくつかの修正を提案できますか?loginモジュールのdjango restframework

+0

あなたは 'authenticate'をオーバーライドしましたか? Djangoの 'authenticate'はメールアドレスに対して認証されません – Sayse

+0

どうすれば認証を上書きできますか? –

答えて

0

デフォルトでは、djangoはnameを使用してリクエストからユーザを取得/認証します。したがって、ユーザモデルにUSERNAME_FIELD = 'email'を設定する必要があります。

Check the DJango docs

一意の識別子として使用されているユーザモデルにフィールドの名前を示す文字列。これは通常、ある種のユーザー名ですが、電子メールアドレスやその他の一意の識別子でもあります。一意でないユーザー名をサポートできるカスタム認証バックエンドを使用しない限り、フィールドは一意である必要があります(つまり、その定義に一意= Trueを設定する必要があります)。

また、DRFを使用しているため、使用するCBVがauthentication_classesを上書きしないことを確認してください。ここで

0

認証

user = authenticate(username=username, password=password) 

の構文は、ここでusernameはユーザモデルのUSERNAME_FIELD値です。デフォルトではその値は 'username'であるため、authenticateメソッドはユーザー名とパスワードの組み合わせを自動的にチェックします。電子メールで認証されるユーザーを変更するには、USERNAME_FIELD = 'email'を設定する必要があります。

user = authenticate(username=email, password=password) 
関連する問題