即使凭据正确,也无法使用curl和django JWT登录
我在django中有一个自定义用户模型:即使凭据正确,也无法使用curl和django JWT登录,django,curl,jwt,django-rest-auth,django-custom-user,Django,Curl,Jwt,Django Rest Auth,Django Custom User,我在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,
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 auth类:
#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),
在shell中创建用户时,如下所示:
>>> from STuser.models import STUser
>>> user = STUser(email='blah@gmail.com',name='Christopher Jakob',password='zaq11qaz')
>>> user.save()
然后运行一个卷曲柱:
curl -X POST -d "email=blah@gmail.com&password=zaq11qaz" http://127.0.0.1:8000/api-token-auth/
还尝试了JSON实现
curl -X POST -H "Content-Type: application/json" -d '{"email":"blah@gmail.com","password":"zaq11qaz"}' http://127.0.0.1:8000/api-token-auth/
我还尝试了wget:
wget--post data=“email=christopher.m。jakob@gmail.com&密码=zaq11qaz“http://127.0.0.1:8000/api-令牌身份验证
/
我得到以下错误:
{"non_field_errors":["Unable to log in with provided credentials."]}
"POST /api-token-auth/ HTTP/1.1" 400 68
但是,我提交的电子邮件
和密码
信息就是数据库中的信息
我不知道这里发生了什么事。我想知道是不是在我的经理那里?但我可以想象,如果在这种情况下,用户对象根本不会被添加。如您所见,我使用的是自定义用户模型
以下是我正在使用的资源:
可能有助于我调查的问题:
这个问题也可以提供帮助:调查它。
我使用的包中的相关代码从第22行开始
堆栈溢出帮助有时命中或未命中 我成功了 首先。我必须更新我的自定义管理器中的代码,它不正确:
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\u user
函数
所以在贝壳里
>>>from STuser.models import STUser
>>> user = STUser.objects.create_user('bobby@test.com','chris','zaq11qaz')
>>> exit()
然后提出一个新的卷曲请求
curl -X POST -d "email=bobby@test.c
om&password=zaq11qaz" http://127.0.0.1:8000/api-token-auth/
看看发生了什么
curl -X POST -d "email=bobby@test.c
om&password=zaq11qaz" http://127.0.0.1:8000/api-token-auth/
{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImJvYmJ5QHRlc3QuY29tIiwidXN... you dont get the rest of my token homie"}
太酷了
拥抱和亲吻