2015-04-06 25 views
8

Tôi đã cài đặt JWT bằng pip. Bây giờ tôi muốn ghi đè lên các phương phápTôi có thể ghi đè phương thức jwt_response_payload_handler ở đâu?

def jwt_response_payload_handler(token, user=None, request=None): 
    return { 'token': token, } 

def jwt_response_payload_handler(token, user=None): 
    return { 
     'token': token, 
     'user': UserSerializer(user).data 
    } 

tôi nên ghi đè lên nó ở đâu? Tôi có ghi đè phương pháp trong ứng dụng của riêng mình không, nhưng ở đâu và như thế nào? hoặc tôi có sửa đổi mã gốc trong thư viện không?

Tôi đã sửa đổi phương thức trong thư viện và nó hoạt động tốt, nhưng tôi không nghĩ đó là cách đúng. Ai đó có thể giúp tôi? Cảm ơn

Trả lời

-1

Khi bạn tạo phương thức xử lý của riêng mình, bạn sẽ phải thay đổi nó trong cài đặt JWT_AUTH. Kiểm tra phần Additional Settings trong tài liệu.

+0

Điều mà tôi nên tạo phương pháp xử lý riêng? trong ứng dụng của riêng tôi hoặc trong thư viện JWT? Tôi có thể sửa đổi thư viện và sau đó nó hoạt động. Điều tôi không chắc chắn là tôi nên làm điều đó, sửa đổi các tập tin trong thư viện? – song

+0

@song Phương thức xử lý đi bất cứ nơi nào có sẵn cho sys.path của bạn, thường là bất cứ nơi nào bên trong dự án của bạn là tốt, ví dụ: 'my_project.utils.jwt_response_payload_handler' –

+1

@song Bạn không bao giờ nên chỉnh sửa gói đã cài đặt. –

15

Tôi tìm thấy thành công cách làm như sau:

myapp.view.py file:

def jwt_response_payload_handler(token, user=None, request=None): 
    return { 
     'token': token, 
     'bunny': 'fu fu' 
    } 

setting.py file:

JWT_AUTH = { 
    'JWT_RESPONSE_PAYLOAD_HANDLER': 
    #'rest_framework_jwt.utils.jwt_response_payload_handler', 
    'myapp.views.jwt_response_payload_handler', 
} 

Thực hiện chức năng jwt_response_payload_handler tại một vị trí tùy ý, nhưng chắc chắn rằng nó nằm trong đường dẫn python của bạn. Ví dụ trong tập tin này: myapp.views.py

Sau đó, trong tập tin settings.py của bạn cập nhật các JWT_AUTH từ điển chính JWT_RESPONSE_PAYLOAD_HANDLER với vị trí mới của jwt_response_payload_handler bạn vừa tạo.

Khi bạn nắm bắt những gì đang diễn ra, bạn có thể điều chỉnh giải pháp theo cách bạn muốn. Ví dụ, tôi sẽ không khuyên bạn nên bỏ chức năng ghi đè của mình trong tệp views.py. Nó chỉ đơn giản hơn cho mục đích trình diễn.

Có lẽ việc đặt hàm jwt_response_payload_handler trong tệp "helper.py" bạn tạo sẽ là một giải pháp đơn giản.

+1

Điều này đã giúp tôi rất nhiều. Nó đã được đơn giản và được viết trong tài liệu rõ ràng và tôi đã không hiểu ở đó. Cảm ơn bạn. –

+1

Giải pháp đơn giản và tốt. – Vingtoft

+0

Bản cập nhật cho những ai chạy vào vấn đề này trong năm 2018. Bạn phải có 'JWT_PAYLOAD_GET_USER_ID_HANDLER': 'rest_framework_jwt.utils.jwt_get_user_id_from_payload_handler', cũng trong JWT_AUTH hoặc ghi đè sẽ không hoạt động. –

Các vấn đề liên quan