問題タブ [django-rest-framework-jwt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Django Rest Framework の @api_view デコレータの使い方と謎のバグ
私のコードは昨日 (自動テストによって) 正常に実行されましたが、今日は壊れてしまいました。基本的に @api_view デコレータが壊れてメソッドの申請に失敗したような感じです。状況は次のとおりです。
「advance_orders」という名前のメソッドがあり、次のようにラップされています。
注: hack=True は、最初にバグを発見した後、デバッグ目的で作成した小さな追加です。
メソッド@check_wallet_token
と@disallow_disabled_users
もここでは無関係であり、それらがバグの原因ではないことを 99.99% 確信しています (昨日、同様にラップされた他のメソッド内/上で正常に動作したため)。
関数への URL マッピングは次のとおりです。
re_path(r'^vendor/orders/advance/$', vendor.advance_orders, name='advance_order'),
今、あるテストで私は持っています:
テストは失敗し、私が見つけた応答テキストを印刷すると:
{"detail":"Method \"POST\" not allowed."}
これは意味がありません!私が露骨に間違ったことをしていない限り、そうではないと確信しています。
++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++
ここで、さらに証拠を集めます。仮想環境にインストールされた DRF のソース コードにアクセスし、2 つのメソッドを変更して追加のデバッグ情報を出力します。
views.py では、次のように変更views.APIView.dispatch()
します。
私が変更する他の方法は次のdecorators.api_view()
とおりです。
./manage.py test Wallet.tests.test_api_vendors.API_VendorTestCase --failfast
ここで、得られた結果を使用して印刷してテストを実行します。
これは、デコレーターが「POST」メソッドを許可したいことを認識したことを意味するため、完全に困惑したままですが、ビュー「advance_order」が実行されると、許可されたメソッドのリストに「POST」が含まれません。
だから私の質問は次のとおりです。間違いは私の側にありますか? もしそうなら、どのように?そうでなければ、そのような問題を解決するにはどうすればよいですか? ( __pycache__ ファイルの削除は機能しませんでした)。
PS 非常に冗長な質問をお詫びします。私の問題について明確にしたいだけです。
reactjs - クライアント側で JWT の有効期限を確認する必要がありますか?
Django REST フレームワーク、react、redux を使用して、案内広告のような Web サイトを開発しています。JWT による認証について質問があります。認証にdjangorestframework_simplejwtを使用したいので、いくつかのチュートリアルを確認しました。以下のように、多くのチュートリアルがクライアント側でアクセストークンをチェックしているのを見ました
トークンもリフレッシュします。しかし、理由はわかりません。期限切れのアクセス トークンで HTTP 401 Unauthorized エラーが発生するたびに、更新トークンを使用して新しいアクセス トークンを要求するだけです。
私が考えたワークフローは
- 認証されたユーザーのみが表示できるページを取得するために、サーバーにアクセス トークンを含むリクエストを送信します。
- アクセス トークンの有効期限が切れている場合、フロントエンドで HTTP 401 Unauthorized エラーが発生します。
- サーバーに更新トークンを含むリクエストを送信して新しいアクセス トークンを取得すると、フロントエンドはそれを localStorage に保存します。
- 再度リクエストを送信してください。
これは悪い方法ですか?
下手な英語で申し訳ありません...
django - Django Rest Framework: JWT 認証に失敗しました
Django REST Framework (DRF) で作成されたアプリケーションがあります。また、次のような登録済みエンドポイントがあります。
また、承認が必要なエンドポイントがいくつかあります。
curl
したがって、クライアントを使用してトークンを抽出しようとしています:
次のようなものが返されます。
次に、トークンを使用して、ログインしたいこのトークンを使用します。
403 (Forbidden)
CSRF 検証に失敗したことを返します。リクエストは中止されました。
なぜ私は間違っているのですか?
ここで興味深い点が 1 つあります。
トークンの各リクエストは、同じユーザーとパスワードのペアに対して新しいトークンを返しますか?