【问题标题】:"No active account found with the given credentials" in django-rest-framework-simple-jwtdjango-rest-framework-simple-jwt 中的“未找到具有给定凭据的活动帐户”
【发布时间】:2020-03-05 20:22:56
【问题描述】:

我无法使用 django-rest-framework-jwt 选择 jwt。 在我使用 jwt-optaining-url 发出请求后,即使给定的信息(电子邮件、密码)是正确的,它也会说“没有找到具有给定凭据的活动帐户”。

我认为我以错误的方式使用序列化程序创建了一个用户。却想不出什么新办法。

登录视图

@csrf_exempt
def facebook_login(request):
    body = dict(request.GET)
    code = body['code'][0]

    params_access = {
        "client_id": FACEBOOK_APP_ID,
        "redirect_uri": FACEBOOK_REDIRECT_URI,
        "client_secret": FACEBOOK_SECRET,
        "code": code
    }
    tokens = requests.get("https://graph.facebook.com/v5.0/oauth/access_token", params=params_access).json()
    access_token = tokens['access_token']

    params_debug = {
        "input_token": access_token,
        "access_token": f'{FACEBOOK_APP_ID}|{FACEBOOK_SECRET}'
    }
    debug = requests.get("https://graph.facebook.com/debug_token", params=params_debug).json()

    params_user = {
        "fields": ["email"],
        "access_token": access_token
    }
    user_fb_data = requests.get("https://graph.facebook.com/me", params=params_user).json()
    user_email = user_fb_data['email']

    user = User.objects.filter(email=user_email)
    if not user:
        user_data = {
            'email': user_email,
            'username': user_email,
        }
        user = UserSerializer(data=user_data, partial=True)
        if user.is_valid():
            user.save()
            print("saved!!!!!!!!!!!!!!!")
        else:
            print("error", user.errors)

    jwt_data = {
        'email': user_email,
        'password': access_token
    }
    jwt = requests.post(JWT_OPTAIN_URL, data=jwt_data).json()
    access_token = jwt['access']
    refresh_token = jwt['refresh']
    data = {
        'access_token': access_token,
        'refresh_token': refresh_token
    }
    return Response(data, status=status.HTTP_201_CREATED)

序列化器

class UserSerializer(serializers.ModelSerializer):
    def create(self, validated_data):
        user = super().create(validated_data)
        user.set_password(self)
        user.save()
        return user

    class Meta:
        model = User
        fields = ('email', 'username', 'refreshToken', 'password')
        extra_kwargs = {'password': {'write_only': True}}

我希望 jwt 是使用电子邮件和密码信息创建的。

【问题讨论】:

    标签: django django-rest-framework jwt django-rest-framework-jwt


    【解决方案1】:

    我终于通过修改一些代码解决了这个问题,然后使用管理页面创建了一个新用户。

    def create(self, validated_data):
            user = super().create(validated_data)
            user.set_password(validated_data['password'])
            user.save()
            return user
    

    【讨论】:

      猜你喜欢
      • 2019-09-03
      • 1970-01-01
      • 2019-09-18
      • 2022-08-04
      • 2020-09-12
      • 1970-01-01
      • 2020-12-18
      • 2018-02-25
      • 2019-02-19
      相关资源
      最近更新 更多