この関数のコメントに続いて、UserSerializerの呼び出しを追加しました。しかし、私はエラーが発生するので、ここではカバーされていないものが欠けているようです。シリアル化されたユーザーを追加するためのjwt_response_payload_handlerのオーバーライドエラー
{"username":"admin","password":"password123"}
結果のエラー:
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
}
使っ郵便配達はしてhttp://localhost:8000/api-token-auth/に投稿します再び変更とPOST:
return {
'token': token,
'user': UserSerializer(context={
'request': request,
'user': user
}).data
}
結果はエラーではありませんが、ユーザーは空です。
{
"user": {
"username": "",
"email": "",
"groups": []
},
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NjA1MjU5MDgsInVzZXJfaWQiOjEsImVtYWlsIjoiYWRtaW5AYWxrLmNvbSIsInVzZXJuYW1lIjoiYWRtaW4ifQ.GLTtlFk2akZIgNb4lGULhyKbgPML1IgYG5lEsfsCoaU"
}
ただ、問題は、私がシリアライザを使用しようとしている方法であることを証明するために、私が試した:
return {
'token': token,
'user': user.pk # Does the user instance contain anything?
# 'user': UserSerializer(context={'user': user}).data
}
をそして得た:
{
"user": 1, # yes
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZW1haWwiOiJhZG1pbkBhbGsuY29tIiwidXNlcl9pZCI6MSwiZXhwIjoxNDYwNTI2MDc4fQ.HFOGQCM-PkBIJhWZWoD255ku719AA5n70ohcFGFhHT0"
}
私は何が欠けていますか?
- This SO Questionユーザーが同じ溶液後のことでしたが、私は私の質問に行われてきた内容を、「何が正確に動作しない」を提供していないように見えます。受け入れ答えはまた、「あなたはそれにいくつかの他の方法をしなければならない」のちょうど応答*品質の質問を書いてもこだわるの魔法を通じて