所以django docs https://docs.djangoproject.com/en/dev/topics/auth/customizing/很棒,但我很困惑,现在有一位导师会很棒。
我想创建自定义用户模型和身份验证系统
the user model will have
-name
-password
-email
-JWT (javascript web token)
权限和场所(娱乐场所)将通过关联表通过多对多关系连接到此用户模型。
这是问题所在,即使是文档,我也很困惑如何覆盖当前的开箱即用实现以进行授权。
此外,我还想使用https://github.com/GetBlimp/django-rest-framework-jwt
用于令牌身份验证,但我不知道如何连接它。我想我正在寻找一个漫步。
答案 0 :(得分:0)
首先,django有内置的User,为方便起见,你可以使用它,如果你需要将其他字段添加到当前的django用户模型:
form django.contrib.auth.models import User
class MyUser(User):
# define your additional custom fields
安装djangorestframework-jwt后,在settings.py
中执行此设置REST_FRAMEWORK = {
...
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
...
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
...
),
}
JWT_AUTH = {
# JWT related settings, see the docs
}
在urls.py中添加以下内容:
urlpatterns = [
....
url(r'^api-token-auth/', obtain_jwt_token),
...
]
现在您应首先浏览获取令牌,然后浏览其他API:
向http://127.0.0.1:8000/api-token-auth/发送帖子请求,并提供用户名和密码以获取您的令牌。 在其他请求中,您应该发送此令牌:
GET http://127.0.0.1:8000/yoururl
HEADER
Authorization JWT <YourToken>
您可以使用curl,httpie,邮递员(Chrome应用)或任何其他HttpClient提出您的请求
答案 1 :(得分:0)
如果要从内置用户中删除字段,则应使用此模型:
from django.core import validators
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import AbstractBaseUser
from django.contrib.auth.models import PermissionsMixin
from django.contrib.auth.models import UserManager
class User(AbstractBaseUser, PermissionsMixin):
username = models.CharField(_('username'), max_length=75, unique=True,
help_text=_('Required. 30 characters or fewer. Letters, numbers and '
'underscores characters'),
validators=[
validators.RegexValidator(re.compile('^[\w]+$'),
_('Enter a valid username.'), 'invalid')
])
first_name = models.CharField(_('first name'), max_length=254, blank=True)
last_name = models.CharField(_('last name'), max_length=30, blank=True)
email = models.EmailField(_('email address'), max_length = 254, unique = True, null = True)
is_staff = models.BooleanField(_('staff status'), default=False,
help_text=_('Designates whether the user can log into this admin '
'site.'))
is_active = models.BooleanField(_('active'), default=True,
help_text=_('Designates whether this user should be treated as '
'active. Unselect this instead of deleting accounts.'))
date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
objects = UserManager()
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['first_name']
def get_full_name(self):
return self.name
def get_short_name(self):
return self.username
这使您可以完全自定义用户模型。您可以删除相应的字段。然后按照设置djangorestframework-jwt。
的说明进行操作