最近私はdjoserを使ってみましたが、ログインするためにユーザー名の代わりに電子メールを使いたいと思います。Djangerでログイン用のdjoserで電子メール認証を使用する
ジョセル:http://djoser.readthedocs.io/en/latest/index.html
それから私は、トークンをカスタマイズしてみてくださいserializers.pyに電子メールにユーザー名から変更し
オリジナル
class TokenCreateSerializer(serializers.Serializer):
password = serializers.CharField(
required=False, style={'input_type': 'password'}
)
default_error_messages = {
'invalid_credentials': constants.INVALID_CREDENTIALS_ERROR,
'inactive_account': constants.INACTIVE_ACCOUNT_ERROR,
}
def __init__(self, *args, **kwargs):
super(TokenCreateSerializer, self).__init__(*args, **kwargs)
self.user = None
self.fields[User.USERNAME_FIELD] = serializers.CharField(
required=False
)
def validate(self, attrs):
self.user = authenticate(
username=attrs.get(User.USERNAME_FIELD),
password=attrs.get('password')
)
self._validate_user_exists(self.user)
self._validate_user_is_active(self.user)
return attrs
def _validate_user_exists(self, user):
if not user:
self.fail('invalid_credentials')
def _validate_user_is_active(self, user):
if not user.is_active:
self.fail('inactive_account')
を/ログインを作成編集
class TokenCreateSerializer(serializers.Serializer):
password = serializers.CharField(
required=False, style={'input_type': 'password'}
)
default_error_messages = {
'invalid_credentials': constants.INVALID_CREDENTIALS_ERROR,
'inactive_account': constants.INACTIVE_ACCOUNT_ERROR,
}
def __init__(self, *args, **kwargs):
super(TokenCreateSerializer, self).__init__(*args, **kwargs)
self.user = None
self.fields[User.EMAIL_FIELD] = serializers.EmailField(
required=False
)
def validate(self, attrs):
self.user = authenticate(
email=attrs.get(User.EMAIL_FIELD),
password=attrs.get('password')
)
self._validate_user_exists(self.user)
self._validate_user_is_active(self.user)
return attrs
def _validate_user_exists(self, user):
if not user:
self.fail('invalid_credentials')
def _validate_user_is_active(self, user):
if not user.is_active:
self.fail('inactive_account')
しかし、私が得た結果はこのAPIです
{
"non_field_errors": [
"Unable to login with provided credentials."
]
私は他の方法を試しましたが、すべて同じ結果があります。ユーザー名の代わりに電子メールを使用して認証する方法はありますか?
これを使用してログインすることができるはず
不思議に思う!ありがとうございます –
Excelente amigo。 fucniona de maravilla !!!! – antikytheraton