2016-04-12 14 views
1

この関数のコメントに続いて、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ユーザーが同じ溶液後のことでしたが、私は私の質問に行われてきた内容を、「何が正確に動作しない」を提供していないように見えます。受け入れ答えはまた、「あなたはそれにいくつかの他の方法をしなければならない」のちょうど応答*品質の質問を書いてもこだわるの魔法を通じて

答えて

3

ソリューションを、提供していない、私は不足している構文の詳細を見つけました!

ユーザーインスタンスとコンテキストは、コンテキストにユーザーが含まれる代わりに、この順序で送信する必要がありました。私はUserSerializeためHyperlinkedModelSerializerをサブクラス化したため

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

私の場合はその理由でした。これには、完全修飾URLを生成できるように要求コンテキストが必要です。

See Docs.

関連する問題