django rest framework jwt 使用电子邮件和密码进行身份验证

Posted

技术标签:

【中文标题】django rest framework jwt 使用电子邮件和密码进行身份验证【英文标题】:django rest framework jwt authentication with email and password 【发布时间】:2017-01-18 23:21:34 【问题描述】:

我有一个 django 项目,我将 django rest 框架用于我的 REST API,并使用JWT 进行身份验证。我想知道是否可以将 JWT 配置为通过电子邮件和密码而不是用户名和密码对用户进行身份验证。我想我可以扩展和覆盖 JWT 的关键部分(这就像我从头开始编写 JWT 一样)但我想知道是否有一种可配置的方式来这样做。

谢谢。

【问题讨论】:

【参考方案1】:

是的,这是可能的。您只需将 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

然后它应该可以工作

【讨论】:

这只能通过电子邮件登录,而不是问题要求的用户名登录,对吧?

以上是关于django rest framework jwt 使用电子邮件和密码进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

DRF:如何将 django-rest-framework-jwt 集成到 Djoser

Django Rest Framework 中的 JWT 身份验证错误“无效签名”

Django Rest Framework JWT 身份验证测试

Django-Rest-Framework JWT 单元测试说“未提供身份验证”

Django Rest Framework 避免身份验证 JWT

如何让 django-rest-framework-jwt 在注册时返回令牌?