問題タブ [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.

0 投票する
0 に答える
2435 参照

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 非常に冗長な質問をお詫びします。私の問題について明確にしたいだけです。

0 投票する
1 に答える
2421 参照

reactjs - クライアント側で JWT の有効期限を確認する必要がありますか?

Django REST フレームワーク、react、redux を使用して、案内広告のような Web サイトを開発しています。JWT による認証について質問があります。認証にdjangorestframework_simplejwtを使用したいので、いくつかのチュートリアルを確認しました。以下のように、多くのチュートリアルがクライアント側でアクセストークンをチェックしているのを見ました

トークンもリフレッシュします。しかし、理由はわかりません。期限切れのアクセス トークンで HTTP 401 Unauthorized エラーが発生するたびに、更新トークンを使用して新しいアクセス トークンを要求するだけです。

私が考えたワークフローは

  1. 認証されたユーザーのみが表示できるページを取得するために、サーバーにアクセス トークンを含むリクエストを送信します。
  2. アクセス トークンの有効期限が切れている場合、フロントエンドで HTTP 401 Unauthorized エラーが発生します。
  3. サーバーに更新トークンを含むリクエストを送信して新しいアクセス トークンを取得すると、フロントエンドはそれを localStorage に保存します。
  4. 再度リクエストを送信してください。

これは悪い方法ですか?

下手な英語で申し訳ありません...

0 投票する
1 に答える
793 参照

django - Django Rest Framework: JWT 認証に失敗しました

Django REST Framework (DRF) で作成されたアプリケーションがあります。また、次のような登録済みエンドポイントがあります。

また、承認が必要なエンドポイントがいくつかあります。

curlしたがって、クライアントを使用してトークンを抽出しようとしています:

次のようなものが返されます。

次に、トークンを使用して、ログインしたいこのトークンを使用します。

403 (Forbidden)CSRF 検証に失敗したことを返します。リクエストは中止されました。

なぜ私は間違っているのですか?

ここで興味深い点が 1 つあります。

トークンの各リクエストは、同じユーザーとパスワードのペアに対して新しいトークンを返しますか?