😽

djangorestframework-simplejwtでトークン認証エラー時のレスポンスをカスタマイズする方法(暫定版)

2021/05/13に公開

djangorestframework-simplejwtでトークン認証エラー時のレスポンスをカスタマイズする方法(暫定版)

djangorestframework-simplejwtでJWTが期待値と異なる場合は、レスポンスがステータス401で以下が返ります。

{"detail":"Given token not valid for any token type","code":"token_not_valid","messages":[{"token_class":"AccessToken","token_type":"access","message":"Token is invalid or expired"}]}

このレスポンスを変えたい!!

公式ドキュメントを見てもレスポンスのカスタマイズ方法が分からず、暫定としてDjangoのミドルウェアで対応。
Django がビューを呼び出す直前に呼び出されるprocess_view()で対応。

サンプルコード

    def process_view(self, request, view_func, view_args, view_kwargs):
        url_path = request.path
        if not url_path.startswith("/api"):
            #API以外の時は何もしない(ミドルウェアは全部のviewを処理してしまうため、URLで判別)
            return None

        try:
	   # Authorization: Bearer tokenでヘッダーで送っている前提
            token = request.META["HTTP_AUTHORIZATION"][7:]
            # JWTのトークンをチェックする。JWTトークンが一致しない場合はエラーをraiseする。
        except:
            error = {"error_code": 401, "error_msg": "JWT認証エラー"}
            errors = {"errors": error}
            return JsonResponse(errors,status=401)

        return None


Discussion