Bu işlevdeki yorumu takiben, UserSerializer'a bir çağrı ekledim. Ama burada kapsanmayan bir şeyi özlüyorum gibi görünüyorum, çünkü bir hata alıyorum.Seri hale getirilmiş kullanıcı eklemek için jwt_response_payload_handler hatası geçersiz kılınan hata
{"username":"admin","password":"password123"}
Sonuç Hata:
AssertionError: `HyperlinkedIdentityField` requires the request in the
serializer context. Add `context={'request': request}` when instantiating
the serializer. // Werkzeug Debugger
# settings
JWT_AUTH = {
'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=36000),
'JWT_RESPONSE_PAYLOAD_HANDLER':
'base.utils.jwt_response_payload_handler',
}
# serializers
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('url', 'username', 'email', 'groups')
# utils
def jwt_response_payload_handler(token, user=None, request=None):
"""
Returns the response data for both the login and refresh views.
Override to return a custom response such as including the
serialized representation of the User.
"""
return {
'token': token,
'user': UserSerializer(user).data
}
kullanımlar postacıyla http://localhost:8000/api-token-auth/ için POST tekrar Değişim ve POST:
return {
'token': token,
'user': UserSerializer(context={
'request': request,
'user': user
}).data
}
Sonucu hiçbir hata olmakla birlikte, kullanıcı boştur.
{
"user": {
"username": "",
"email": "",
"groups": []
},
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NjA1MjU5MDgsInVzZXJfaWQiOjEsImVtYWlsIjoiYWRtaW5AYWxrLmNvbSIsInVzZXJuYW1lIjoiYWRtaW4ifQ.GLTtlFk2akZIgNb4lGULhyKbgPML1IgYG5lEsfsCoaU"
}
Sadece Sorunum Serializer kullanmaya çalışıyorum nasıl olduğunu kanıtlamak için, denedim:
return {
'token': token,
'user': user.pk # Does the user instance contain anything?
# 'user': UserSerializer(context={'user': user}).data
}
Ve var:
{
"user": 1, # yes
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZW1haWwiOiJhZG1pbkBhbGsuY29tIiwidXNlcl9pZCI6MSwiZXhwIjoxNDYwNTI2MDc4fQ.HFOGQCM-PkBIJhWZWoD255ku719AA5n70ohcFGFhHT0"
}
Neyi eksik? Kullanıcı aynı solüsyon sonra oldu, ama benim söz konusu yapmış "Tam olarak çalışmıyor Ne" ayrıntıları, teklif etmedi gibi
- This SO Question görünüyor. Kabul cevabı da bir çözüm, kaliteli bir soru yazma Saplantı sihrini kullanarak *