Я пытаюсь получить токен авторизации, используя электронную почту вместо имени пользователя, я изменил сериализацию, чтобы принимать только электронную почту, но я думаю, что у меня что-то не так.
class AuthTokenSerializer(serializers.Serializer):
"""Serializer for user authentication object"""
email_or_username = serializers.CharField()
password = serializers.CharField(style = {'input_type' : 'password' }, trim_whitespace = False)
def validate(self, attrs):
"""Validate and authentiate the user"""
email_or_username = attrs.get('email')
password = attrs.get('password')
user = authenticate(request = self.context.get('request'), username = email, password = password)
if not user:
msg = _('Unable to authenticate with provided credentials.')
raise serializers.ValidationError(msd, code='authorization')
attrs['user'] = user
return attrs
и вид
class LoginViewSet(viewsets.ViewSet):
"""Check email and password and returns an auth token."""
serializer_class = serializers.AuthTokenSerializer
renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES
def create(self, request):
"""Use the ObtainAuthToken APIview to validate and create a token."""
return ObtainAuthToken().post(request)
когда я делаю тест
def test_create_token_for_user(self):
"""Test that a token is created"""
parametrs = {'email' : 'test@noah-lc.com','email' : 'test@noah-lc.com', 'name' : 'test', 'password' : 'testPASS@123'}
create_user(**parametrs)
res = self.client.post(TOKEN_URL, parametrs)
print(res.data)
self.assertIn('token', res.data)
self.assertEqual(res.status_code, status.HTTP_200_OK)
Я получил эту ошибку
AssertionError: 'token' не найден в {'username': [ErrorDetail (string = 'Это поле обязательно для заполнения.', Code = 'required')]}} 1013 *
Модель собственного пользователя
class UserProfile(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=255, unique=True)
name = models.CharField(max_length=255)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
И настройка
AUTH_USER_MODEL = 'core.UserProfile'