2016-04-12 13 views
1

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 *

cevap

3

"Sen bunu başka bir şekilde yapmak zorunda" sadece bir yanıt sağlamaz, eksik sözdizimsel detay bulundu !

Kullanıcı örneğinin ve içeriğinin, bağlamda yer alan kullanıcı yerine bu sırada gönderilmesi gerekir. Ben UserSerialize için HyperlinkedModelSerializer sınıflara çünkü

return { 
    'token': token, 
    'user': UserSerializer(user,context={'request': request},).data 
} 

benim durumumda nedeni

oldu. Bu, istek bağlamını gerektirdiğinden, tam nitelikli URL'ler oluşturabilir.

See Docs.

İlgili konular