0

我想将登录方法从username更改为email

网址.py

from rest_framework_jwt.views import obtain_jwt_token,refresh_jwt_token

urlpatterns = [
    url(r'^login/$', obtain_jwt_token),
    url(r'^tokenRefresh/', refresh_jwt_token)
]

设置.py

ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_USERNAME_REQUIRED = False

我已经使用了上述解决方案,但不适用于我。你能帮忙吗!!

4

1 回答 1

1

那是因为django-allauth与 无关django-rest-framework-jwt。你在里面设置的设置settings.py是属于的,django-allauth所以如果你想使用这些设置,那么你应该使用django-allauth视图。

有了django-rest-framework-jwt视图,我查看了obtain_jwt_token视图,并且看到它们get_user_model().USERNAME_FIELD用于获取用户名字段。

from django.contrib.auth import get_user_model

def get_username_field():
    try:
        username_field = get_user_model().USERNAME_FIELD
    except AttributeError:
        username_field = 'username'

    return username_field

因此,如果您想将用户名字段更改为另一个,您可以创建一个自定义User模型,然后将值设置为USERNAME_FIELDtoemail以允许用户通过email而不是登录username。像这样:

app_name/models.py

from django.contrib.auth.models import AbstractUser
from django.db import models

class User(AbstractUser):
    USERNAME_FIELD = 'email'

    def __str__(self):
        return self.email

在你的settings.py 上:

AUTH_USER_MODEL = 'app_name.User'
于 2019-10-15T11:14:24.537 回答