我有一个Django项目,使用Django Rest Framework来构建我的REST API,并使用JWT进行身份验证。我想知道是否可以配置JWT来通过电子邮件和密码而不是用户名和密码对用户进行身份验证。我想我可以扩展和覆盖JWT的关键部分(这就像我从头开始编写JWT一样),但我想知道是否有可配置的方法来实现这一点。
谢谢。
谢谢。
是的,这是可能的。您只需将USERNAME_FIELD设置为电子邮件(USERNAME_FIELD = 'email')和您的模型。
以下是一个示例:
from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.models import PermissionsMixin
from django.contrib.auth.base_user import AbstractBaseUser
from django.utils.translation import ugettext_lazy as _
from .managers import UserManager
class User(AbstractBaseUser, PermissionsMixin):
created = models.DateTimeField(_('created'), auto_now_add=True)
email = models.EmailField(_('email'), unique=True, blank=False)
name = models.CharField(_('name'), max_length=30, blank=False)
last_name = models.CharField(_('last name'), max_length=100, blank=False)
is_active = models.BooleanField(_('active'), default=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['name', 'last_name']
class Meta:
ordering = ('created',)
verbose_name = _('user')
verbose_name_plural = _('users')
def get_full_name(self):
"""
Returns the first_name plus the last_name, with a space in between.
"""
full_name = '%s %s' % (self.first_name, self.last_name)
return full_name.strip()
def get_short_name(self):
"""
Returns the short name for the user.
"""
return self.name