не удалось войти в систему с помощью curl и django JWT, хотя учетные данные верны

У меня есть пользовательская модель в django здесь:

class UserManager(BaseUserManager):
    def create_User(self, email, name, companyname=None, userphoto=None,
                    userphotokey=None, signupvalidatestring=None, is_active=False, phone=None, jobtitle=None,
                    isclient=False, issuitsviewer=False, issuitsadministrator=False, issuitssuperuser=False,
                    password=None):
        if not email:
            raise ValueError('Users must have an email address')
        if not name:
            raise ValueError('Users must have a name')
        user = self.model(email = self.normalize_email(email),
                          name = name,
                          companyname= companyname,
                          userphoto= userphoto,
                          userphotokey=userphotokey,
                          signupvaildatestring=signupvalidatestring,
                          is_active=is_active,
                          phone=phone,
                          jobtitle=jobtitle,
                          isclient=isclient,
                          issuitsviewer = issuitsviewer,
                          issuitsadministrator=issuitsadministrator,
                          isuitssuperuser=issuitssuperuser)
        if not password:
            user.set_unusable_password()
        else:
            user.set_password(password)
            user.is_active = True
            user.save(using=self._db)
            return user

    def create_superuser(self):
        pass

# permissions table



class STUser(AbstractBaseUser):
    email = models.EmailField(unique=True)
    name = models.CharField(max_length=255)
    companyname = models.CharField(max_length=200, blank=True, null=True)
    userphoto = models.CharField(max_length=200, blank=True, null=True)
    userphotokey = models.CharField(max_length=200, blank=True, null=True)
    signupvaildatestring = models.CharField(max_length=200, blank=True, null=True)
    is_active = models.BooleanField(default=False)
    phone = models.CharField(max_length=10, null=True, blank=True)
    jobtitle = models.CharField(max_length=100, null=True, blank=True)
    isclient = models.BooleanField(default=False)
    issuitsviewer = models.BooleanField(default=False)
    issuitsadministrator = models.BooleanField(default=False)
    issuitssuperuser = models.BooleanField(default=False)
    # password field function is provided by AbstractBaseUser

    objects = UserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['name']
    EMAIL_FIELD = 'email'

class VenuePermissions(models.Model):
    user = models.ForeignKey(STUser, on_delete=models.CASCADE)
    venue = models.ForeignKey(Venue, on_delete=models.CASCADE, blank=True, null=True)
    isvenueviewer = models.BooleanField(default=False)
    isvenueeventplanner = models.BooleanField(default=False)
    isvenueadministrator = models.BooleanField(default=False)
    receiverfp = models.BooleanField(default=False)

У меня есть класс авторизации jwt:

#REST Framework
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',

У меня есть конечная точка URL:

from rest_framework_jwt.views import obtain_jwt_token
url(r'^api-token-auth/', obtain_jwt_token),

когда я создаю пользователя в оболочке следующим образом:

>>> from STuser.models import STUser
>>> user = STUser(email='[email protected]',name='Christopher Jakob',password='zaq11qaz')
>>> user.save()

затем запустите сообщение curl:

curl -X POST -d "[email protected]&password=zaq11qaz" http://127.0.0.1:8000/api-token-auth/

а также попробовал реализацию JSON

curl -X POST -H "Content-Type: application/json" -d '{"email":"[email protected]","password":"zaq11qaz"}' http://127.0.0.1:8000/api-token-auth/

Я также пробовал с помощью wget:

wget --post-data="[email protected]&password=zaq11qaz" http://127.0.0.1:8000/api-token-auth/

Я получаю следующую ошибку:

{"non_field_errors":["Unable to log in with provided credentials."]}
"POST /api-token-auth/ HTTP/1.1" 400 68

Однако информация email и password, которую я представил, находится в базе данных.

Я не уверен, что здесь происходит. Интересно, это в моем менеджере? Но я бы предположил, что в таком случае пользовательские объекты вообще не будут добавляться. Как видите, я использую пользовательскую модель пользователя.

вот ресурс, который я использую:

https://getblimp.github.io/django-rest-framework-jwt/< /а>

вопрос, который может помочь мне разобраться в этом: Django (с использованием TokenAuthentication): non_field_errors: Не удалось войти в систему с предоставленными учетными данными?

этот вопрос также может помочь: изучить его. Веб-токен JSON для Django REST не будет аутентифицироваться в базу данных пользователей

Соответствующий код в пакете, который я использую, начинается со строки 22 https://github.com/GetBlimp/django-rest-framework-jwt/blob/master/rest_framework_jwt/serializers.py


person Community    schedule 25.04.2018    source источник


Ответы (1)


Помощь Stackoverflow иногда попадает или отсутствует.

я получил его на работу

Первый. Мне пришлось обновить код в моем пользовательском менеджере, он был неправильным:

class UserManager(BaseUserManager):

    def create_user(self, email, name, password ,**extraarguments):
        if not email:
            raise ValueError('Users must have an email address')
        if not name:
            raise ValueError('Users must have a name')
        if not password:
            raise ValueError('User must have a password')
        user = self.model(email = self.normalize_email(email),
                          name = name, **extraarguments)
        user.set_password(password)
        user.is_active = True
        user.save()
        return user

    def create_superuser(self, email, name, password, **extraarguments):
        if not email:
            raise ValueError('Users must have an email address')
        if not name:
            raise ValueError('Users must have a name')
        if not password:
            raise ValueError('Users must have a password')
        user = self.model(email = self.normalize_email(email),
                          name = name, **extraarguments)
        user.set_password(password)
        user.is_active = True
        user.save()
        return user

тогда мне нужно было не просто не создавать объект STUser, как я это сделал, а вызывать функцию create_user в менеджере.

так в скорлупе

>>>from STuser.models import STUser
>>> user = STUser.objects.create_user('[email protected]','chris','zaq11qaz')
>>> exit()

затем сделайте новый запрос на завивку

curl -X POST -d "[email protected]
om&password=zaq11qaz" http://127.0.0.1:8000/api-token-auth/

и смотри что получилось...

curl -X POST -d "[email protected]
om&password=zaq11qaz" http://127.0.0.1:8000/api-token-auth/
{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImJvYmJ5QHRlc3QuY29tIiwidXN... you dont get the rest of my token homie"}

оооочень круто.

Объятия и поцелуи

person Community    schedule 27.04.2018