gpt4 book ai didi

Django 使用带有 djoser 的电子邮件身份验证进行登录

转载 作者:行者123 更新时间:2023-12-02 08:10:51 27 4
gpt4 key购买 nike

所以我最近尝试使用 djoser,我想使用电子邮件而不是用户名登录。

左塞尔:http://djoser.readthedocs.io/en/latest/index.html

然后我尝试自定义 token 创建/登录以在 serializers.py 中从用户名更改为电子邮件

原来的

class TokenCreateSerializer(serializers.Serializer):
password = serializers.CharField(
required=False, style={'input_type': 'password'}
)

default_error_messages = {
'invalid_credentials': constants.INVALID_CREDENTIALS_ERROR,
'inactive_account': constants.INACTIVE_ACCOUNT_ERROR,
}

def __init__(self, *args, **kwargs):
super(TokenCreateSerializer, self).__init__(*args, **kwargs)
self.user = None
self.fields[User.USERNAME_FIELD] = serializers.CharField(
required=False
)

def validate(self, attrs):
self.user = authenticate(
username=attrs.get(User.USERNAME_FIELD),
password=attrs.get('password')
)

self._validate_user_exists(self.user)
self._validate_user_is_active(self.user)
return attrs

def _validate_user_exists(self, user):
if not user:
self.fail('invalid_credentials')

def _validate_user_is_active(self, user):
if not user.is_active:
self.fail('inactive_account')

已编辑
class TokenCreateSerializer(serializers.Serializer):
password = serializers.CharField(
required=False, style={'input_type': 'password'}
)

default_error_messages = {
'invalid_credentials': constants.INVALID_CREDENTIALS_ERROR,
'inactive_account': constants.INACTIVE_ACCOUNT_ERROR,
}

def __init__(self, *args, **kwargs):
super(TokenCreateSerializer, self).__init__(*args, **kwargs)
self.user = None
self.fields[User.EMAIL_FIELD] = serializers.EmailField(
required=False
)

def validate(self, attrs):
self.user = authenticate(
email=attrs.get(User.EMAIL_FIELD),
password=attrs.get('password')
)

self._validate_user_exists(self.user)
self._validate_user_is_active(self.user)
return attrs

def _validate_user_exists(self, user):
if not user:
self.fail('invalid_credentials')

def _validate_user_is_active(self, user):
if not user.is_active:
self.fail('inactive_account')

但我在 api 中得到的结果是这样的
{
"non_field_errors": [
"Unable to login with provided credentials."
]

我确实尝试过其他方法,但结果都相同。有没有办法让它使用电子邮件而不是用户名进行身份验证?

最佳答案

我正在寻找这个问题的答案并遇到了这个线程!
一切正常,但后来我找到了一个更简单的解决方案:

DJOSER = {
'LOGIN_FIELD': 'email'
}
我不知道,也许有人会需要它!

关于Django 使用带有 djoser 的电子邮件身份验证进行登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47196908/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com