You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

django-rest-framework-jwt无法获取JWT:凭证无效报错求助

解决JWT无法获取的问题:密码设置错误导致凭证不匹配

嘿,我看了你的代码,问题出在用户创建时的密码设置逻辑上,这才导致JWT接口返回"No active account found with the given credentials"。咱们一步步拆解修复:

1. 核心错误:Serializer的create方法写错了set_password参数

你的UserSerializer里这行代码完全不对:

user.set_password(self)

self是Serializer实例本身,不是密码字符串!这会把用户密码设置成一个无效的对象引用,而不是你想用的access_token。而且你创建用户时,user_data里根本没传password字段,等于用户创建后密码是空的,自然无法通过JWT的密码验证。

2. 分步骤修复

第一步:修正UserSerializer的密码设置逻辑

把create方法改成这样,确保能正确接收并设置密码:

class UserSerializer(serializers.ModelSerializer):
    def create(self, validated_data):
        # 从验证数据中取出密码(如果存在)
        password = validated_data.pop('password', None)
        # 调用父类方法创建用户
        user = super().create(validated_data)
        # 如果有密码,就设置并保存
        if password:
            user.set_password(password)
            user.save()
        return user
    
    class Meta:
        model = User
        fields = ('email', 'username', 'refreshToken', 'password')
        extra_kwargs = {'password': {'write_only': True}}

第二步:创建用户时传入access_token作为密码

在Facebook登录的视图里,创建用户的user_data要加上password字段,值就是access_token——这样JWT验证时用这个密码才能匹配:

user = User.objects.filter(email=user_email).first()  # 改成first()直接拿到用户对象,更直观
if not user:
    user_data = {
        'email': user_email,
        'username': user_email,
        'password': access_token  # 新增这行,把access_token设为用户密码
    }
    user_serializer = UserSerializer(data=user_data)  # 这里不需要partial=True,因为我们传了所有必要字段
    if user_serializer.is_valid():
        user = user_serializer.save()  # 保存后拿到User对象
        print("saved!!!!!!!!!!!!!!!")
    else:
        print("error", user_serializer.errors)

第三步:确认JWT的验证字段配置(可选)

如果你配置JWT时是用邮箱作为验证字段,要确保settings.py里有对应的设置:

JWT_AUTH = {
    # 其他配置...
    'JWT_USERNAME_FIELD': 'email',  # 指定用邮箱作为验证字段
    'JWT_PAYLOAD_GET_USERNAME_HANDLER': lambda payload: payload.get('email'),
}

要是你用默认的用户名验证,那也没问题,因为你创建用户时username就是邮箱,和你传给JWT接口的email值一致。

这样修改后,再去请求JWT接口时,就能用正确的邮箱和密码(access_token)匹配到用户,成功拿到令牌啦!

内容的提问来源于stack exchange,提问作者himori123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:33:03