【发布时间】: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